summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYRIGHT.txt2
-rw-r--r--core/config/engine.cpp10
-rw-r--r--core/config/engine.h5
-rw-r--r--core/core_bind.h3
-rw-r--r--core/core_constants.cpp41
-rw-r--r--core/input/input.cpp165
-rw-r--r--core/input/input.h12
-rw-r--r--core/input/input_event.cpp91
-rw-r--r--core/input/input_event.h78
-rw-r--r--core/input/input_map.cpp26
-rw-r--r--core/input/input_map.h7
-rw-r--r--core/io/file_access_zip.cpp1
-rw-r--r--core/io/http_client.cpp59
-rw-r--r--core/io/http_client.h4
-rw-r--r--core/io/image.cpp1
-rw-r--r--core/io/image.h2
-rw-r--r--core/io/ip.h2
-rw-r--r--core/io/ip_address.cpp1
-rw-r--r--core/io/json.h1
-rw-r--r--core/io/multiplayer_api.h1
-rw-r--r--core/io/resource.cpp14
-rw-r--r--core/io/resource_format_binary.cpp2
-rw-r--r--core/io/resource_saver.h1
-rw-r--r--core/io/stream_peer_tcp.h1
-rw-r--r--core/math/geometry_3d.cpp2
-rw-r--r--core/math/math_defs.h5
-rw-r--r--core/math/math_fieldwise.cpp10
-rw-r--r--core/math/octree.h1
-rw-r--r--core/object/callable_method_pointer.h3
-rw-r--r--core/object/method_bind.h1
-rw-r--r--core/object/object.cpp3
-rw-r--r--core/object/object.h2
-rw-r--r--core/object/script_language.h1
-rw-r--r--core/os/file_access.h1
-rw-r--r--core/os/keyboard.cpp1
-rw-r--r--core/os/keyboard.h3
-rw-r--r--core/os/os.h1
-rw-r--r--core/os/pool_allocator.h1
-rw-r--r--core/os/thread.h1
-rw-r--r--core/string/string_name.h1
-rw-r--r--core/string/ustring.cpp1
-rw-r--r--core/string/ustring.h1
-rw-r--r--core/templates/sort_array.h1
-rw-r--r--core/variant/variant.h1
-rw-r--r--core/variant/variant_call.cpp30
-rw-r--r--core/variant/variant_op.cpp1
-rw-r--r--core/variant/variant_parser.h1
-rw-r--r--core/variant/variant_utility.cpp81
-rw-r--r--doc/classes/@GlobalScope.xml1282
-rw-r--r--doc/classes/Array.xml3
-rw-r--r--doc/classes/Control.xml20
-rw-r--r--doc/classes/Curve2D.xml8
-rw-r--r--doc/classes/Curve3D.xml8
-rw-r--r--doc/classes/Dictionary.xml78
-rw-r--r--doc/classes/Image.xml8
-rw-r--r--doc/classes/ImageTexture.xml35
-rw-r--r--doc/classes/Input.xml40
-rw-r--r--doc/classes/InputEventWithModifiers.xml4
-rw-r--r--doc/classes/JSONParser.xml57
-rw-r--r--doc/classes/MarginContainer.xml13
-rw-r--r--doc/classes/NavigationPolygon.xml29
-rw-r--r--doc/classes/Node.xml38
-rw-r--r--doc/classes/NodePath.xml54
-rw-r--r--doc/classes/OS.xml47
-rw-r--r--doc/classes/PCKPacker.xml12
-rw-r--r--doc/classes/PackedByteArray.xml10
-rw-r--r--doc/classes/PackedScene.xml49
-rw-r--r--doc/classes/PacketPeerUDP.xml39
-rw-r--r--doc/classes/Performance.xml66
-rw-r--r--doc/classes/PhysicsShapeQueryParameters2D.xml35
-rw-r--r--doc/classes/PhysicsShapeQueryParameters3D.xml35
-rw-r--r--doc/classes/Popup.xml2
-rw-r--r--doc/classes/PrimitiveMesh.xml15
-rw-r--r--doc/classes/ProjectSettings.xml87
-rw-r--r--doc/classes/SceneTree.xml2
-rw-r--r--doc/classes/Texture2D.xml1
-rw-r--r--doc/classes/Theme.xml126
-rw-r--r--doc/classes/Tree.xml11
-rw-r--r--doc/classes/World2D.xml2
-rw-r--r--doc/classes/World3D.xml2
-rw-r--r--drivers/dummy/rasterizer_dummy.h6
-rw-r--r--drivers/png/png_driver_common.cpp1
-rw-r--r--drivers/png/png_driver_common.h1
-rw-r--r--drivers/vulkan/rendering_device_vulkan.cpp8
-rw-r--r--drivers/vulkan/vulkan_context.cpp3
-rw-r--r--drivers/vulkan/vulkan_context.h1
-rw-r--r--editor/debugger/editor_debugger_node.cpp34
-rw-r--r--editor/debugger/editor_debugger_node.h3
-rw-r--r--editor/debugger/editor_visual_profiler.cpp4
-rw-r--r--editor/debugger/script_editor_debugger.cpp19
-rw-r--r--editor/dependency_editor.cpp4
-rw-r--r--editor/editor_data.h1
-rw-r--r--editor/editor_export.cpp3
-rw-r--r--editor/editor_help.h1
-rw-r--r--editor/editor_node.cpp86
-rw-r--r--editor/editor_properties.h1
-rw-r--r--editor/editor_run.h1
-rw-r--r--editor/editor_themes.cpp3
-rw-r--r--editor/filesystem_dock.cpp2
-rw-r--r--editor/import/collada.h1
-rw-r--r--editor/import/editor_scene_importer_gltf.cpp12
-rw-r--r--editor/import/resource_importer_texture.cpp2
-rw-r--r--editor/input_map_editor.cpp54
-rw-r--r--editor/node_3d_editor_gizmos.cpp2
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp3
-rw-r--r--editor/plugins/collision_polygon_3d_editor_plugin.h1
-rw-r--r--editor/plugins/cpu_particles_3d_editor_plugin.h1
-rw-r--r--editor/plugins/gpu_particles_2d_editor_plugin.h1
-rw-r--r--editor/plugins/gpu_particles_3d_editor_plugin.h1
-rw-r--r--editor/plugins/item_list_editor_plugin.h1
-rw-r--r--editor/plugins/mesh_instance_3d_editor_plugin.h1
-rw-r--r--editor/plugins/mesh_library_editor_plugin.h1
-rw-r--r--editor/plugins/multimesh_editor_plugin.h1
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp2
-rw-r--r--editor/plugins/node_3d_editor_plugin.h4
-rw-r--r--editor/plugins/path_2d_editor_plugin.h1
-rw-r--r--editor/plugins/shader_editor_plugin.cpp1
-rw-r--r--editor/plugins/shader_editor_plugin.h1
-rw-r--r--editor/plugins/tile_map_editor_plugin.h2
-rw-r--r--editor/plugins/tile_set_editor_plugin.cpp3
-rw-r--r--editor/plugins/version_control_editor_plugin.h1
-rw-r--r--editor/project_export.cpp53
-rw-r--r--editor/project_export.h2
-rw-r--r--editor/project_manager.cpp60
-rw-r--r--editor/project_manager.h1
-rw-r--r--editor/scene_tree_dock.cpp8
-rw-r--r--editor/scene_tree_dock.h1
-rw-r--r--editor/translations/af.po48
-rw-r--r--editor/translations/ar.po83
-rw-r--r--editor/translations/bg.po303
-rw-r--r--editor/translations/bn.po59
-rw-r--r--editor/translations/ca.po60
-rw-r--r--editor/translations/cs.po2473
-rw-r--r--editor/translations/da.po59
-rw-r--r--editor/translations/de.po160
-rw-r--r--editor/translations/editor.pot46
-rw-r--r--editor/translations/el.po60
-rw-r--r--editor/translations/eo.po53
-rw-r--r--editor/translations/es.po151
-rw-r--r--editor/translations/es_AR.po60
-rw-r--r--editor/translations/et.po52
-rw-r--r--editor/translations/eu.po48
-rw-r--r--editor/translations/fa.po169
-rw-r--r--editor/translations/fi.po144
-rw-r--r--editor/translations/fil.po46
-rw-r--r--editor/translations/fr.po132
-rw-r--r--editor/translations/ga.po46
-rw-r--r--editor/translations/he.po279
-rw-r--r--editor/translations/hi.po60
-rw-r--r--editor/translations/hr.po92
-rw-r--r--editor/translations/hu.po60
-rw-r--r--editor/translations/id.po68
-rw-r--r--editor/translations/is.po47
-rw-r--r--editor/translations/it.po147
-rw-r--r--editor/translations/ja.po101
-rw-r--r--editor/translations/ka.po47
-rw-r--r--editor/translations/ko.po179
-rw-r--r--editor/translations/lt.po47
-rw-r--r--editor/translations/lv.po57
-rw-r--r--editor/translations/mi.po46
-rw-r--r--editor/translations/ml.po46
-rw-r--r--editor/translations/mr.po46
-rw-r--r--editor/translations/ms.po60
-rw-r--r--editor/translations/nb.po59
-rw-r--r--editor/translations/nl.po67
-rw-r--r--editor/translations/or.po46
-rw-r--r--editor/translations/pl.po60
-rw-r--r--editor/translations/pr.po47
-rw-r--r--editor/translations/pt.po60
-rw-r--r--editor/translations/pt_BR.po60
-rw-r--r--editor/translations/ro.po60
-rw-r--r--editor/translations/ru.po150
-rw-r--r--editor/translations/si.po46
-rw-r--r--editor/translations/sk.po60
-rw-r--r--editor/translations/sl.po59
-rw-r--r--editor/translations/sq.po59
-rw-r--r--editor/translations/sr_Cyrl.po59
-rw-r--r--editor/translations/sr_Latn.po46
-rw-r--r--editor/translations/sv.po101
-rw-r--r--editor/translations/ta.po47
-rw-r--r--editor/translations/te.po46
-rw-r--r--editor/translations/th.po136
-rw-r--r--editor/translations/tr.po60
-rw-r--r--editor/translations/tzm.po46
-rw-r--r--editor/translations/uk.po142
-rw-r--r--editor/translations/ur_PK.po47
-rw-r--r--editor/translations/vi.po59
-rw-r--r--editor/translations/zh_CN.po1685
-rw-r--r--editor/translations/zh_HK.po54
-rw-r--r--editor/translations/zh_TW.po347
-rw-r--r--main/main.cpp15
-rw-r--r--main/performance.cpp2
-rw-r--r--main/performance.h1
-rw-r--r--misc/dist/html/editor.html7
-rw-r--r--misc/dist/html/fixed-size.html4
-rw-r--r--misc/dist/html/full-size.html5
-rw-r--r--misc/dist/windows/.gitignore2
-rw-r--r--misc/dist/windows/README.md17
-rw-r--r--misc/dist/windows/godot.iss63
-rw-r--r--misc/dist/windows/modpath.pas219
-rwxr-xr-xmisc/scripts/file_format.sh7
-rw-r--r--modules/basis_universal/texture_basisu.cpp14
-rw-r--r--modules/basis_universal/texture_basisu.h2
-rw-r--r--modules/bullet/bullet_physics_server.cpp3
-rw-r--r--modules/bullet/bullet_physics_server.h1
-rw-r--r--modules/dds/texture_loader_dds.cpp2
-rw-r--r--modules/etc/image_etc.cpp2
-rw-r--r--modules/gdnative/include/nativescript/godot_nativescript.h1
-rw-r--r--modules/gdnative/tests/test_string.h1
-rw-r--r--modules/gdscript/language_server/lsp.hpp1
-rw-r--r--modules/gdscript/tests/test_gdscript.cpp1
-rw-r--r--modules/gdscript/tests/test_gdscript.h1
-rw-r--r--modules/gridmap/grid_map_editor_plugin.h4
-rw-r--r--modules/mono/build_scripts/make_android_mono_config.py1
-rw-r--r--modules/mono/editor/code_completion.cpp1
-rw-r--r--modules/mono/editor/code_completion.h1
-rw-r--r--modules/mono/editor/godotsharp_export.cpp1
-rw-r--r--modules/mono/editor/godotsharp_export.h1
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs27
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs110
-rw-r--r--modules/mono/godotsharp_dirs.cpp1
-rw-r--r--modules/mono/godotsharp_dirs.h1
-rw-r--r--modules/mono/mono_gc_handle.h1
-rw-r--r--modules/mono/mono_gd/gd_mono.cpp1
-rw-r--r--modules/mono/mono_gd/gd_mono.h1
-rw-r--r--modules/mono/mono_gd/gd_mono_cache.cpp1
-rw-r--r--modules/mono/mono_gd/gd_mono_cache.h1
-rw-r--r--modules/mono/mono_gd/gd_mono_internals.cpp1
-rw-r--r--modules/mono/mono_gd/gd_mono_internals.h1
-rw-r--r--modules/mono/mono_gd/gd_mono_marshal.cpp1
-rw-r--r--modules/mono/mono_gd/gd_mono_marshal.h2
-rw-r--r--modules/mono/mono_gd/gd_mono_utils.cpp2
-rw-r--r--modules/mono/mono_gd/gd_mono_utils.h2
-rw-r--r--modules/mono/mono_gd/support/android_support.cpp1
-rwxr-xr-xmodules/mono/mono_gd/support/android_support.h1
-rwxr-xr-xmodules/mono/mono_gd/support/ios_support.h1
-rw-r--r--modules/mono/mono_gd/support/ios_support.mm1
-rw-r--r--modules/mono/utils/macros.h1
-rw-r--r--modules/mono/utils/mono_reg_utils.cpp1
-rw-r--r--modules/mono/utils/path_utils.cpp1
-rw-r--r--modules/mono/utils/path_utils.h1
-rw-r--r--modules/mono/utils/string_utils.cpp1
-rw-r--r--modules/pvr/texture_loader_pvr.cpp2
-rw-r--r--modules/upnp/upnp.h1
-rw-r--r--modules/upnp/upnp_device.h1
-rw-r--r--modules/visual_script/visual_script.cpp1
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.cpp1
-rw-r--r--modules/visual_script/visual_script_editor.h1
-rw-r--r--modules/visual_script/visual_script_func_nodes.cpp1
-rw-r--r--modules/webrtc/library_godot_webrtc.js2
-rw-r--r--modules/websocket/library_godot_websocket.js7
-rw-r--r--platform/android/api/java_class_wrapper.h1
-rw-r--r--platform/android/audio_driver_opensl.h1
-rw-r--r--platform/android/export/export.cpp9
-rw-r--r--platform/android/file_access_android.cpp1
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/Godot.java2
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotIO.java6
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt1
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt1
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt2
-rw-r--r--platform/iphone/SCsub1
-rw-r--r--platform/iphone/export/export.cpp1
-rw-r--r--platform/iphone/godot_app_delegate.h41
-rw-r--r--platform/iphone/godot_app_delegate.m497
-rw-r--r--platform/iphone/main.m5
-rw-r--r--platform/javascript/detect.py1
-rw-r--r--platform/javascript/display_server_javascript.cpp2
-rw-r--r--platform/javascript/engine/preloader.js4
-rw-r--r--platform/javascript/engine/utils.js2
-rw-r--r--platform/javascript/native/audio.worklet.js5
-rw-r--r--platform/javascript/native/http_request.js2
-rw-r--r--platform/javascript/native/library_godot_audio.js3
-rw-r--r--platform/javascript/native/library_godot_display.js1
-rw-r--r--platform/javascript/native/library_godot_editor_tools.js1
-rw-r--r--platform/javascript/native/library_godot_eval.js2
-rw-r--r--platform/javascript/native/library_godot_os.js2
-rw-r--r--platform/linuxbsd/detect.py1
-rw-r--r--platform/linuxbsd/display_server_x11.cpp45
-rw-r--r--platform/linuxbsd/joypad_linux.cpp8
-rw-r--r--platform/linuxbsd/key_mapping_x11.cpp3
-rw-r--r--platform/osx/detect.py11
-rw-r--r--platform/server/detect.py1
-rw-r--r--platform/windows/detect.py7
-rw-r--r--platform/windows/key_mapping_windows.cpp2
-rw-r--r--platform/windows/os_windows.cpp4
-rw-r--r--scene/2d/cpu_particles_2d.h1
-rw-r--r--scene/3d/camera_3d.cpp4
-rw-r--r--scene/3d/camera_3d.h2
-rw-r--r--scene/3d/cpu_particles_3d.h1
-rw-r--r--scene/3d/node_3d.h1
-rw-r--r--scene/3d/path_3d.h1
-rw-r--r--scene/3d/physics_joint_3d.h2
-rw-r--r--scene/3d/skeleton_3d.h1
-rw-r--r--scene/3d/sprite_3d.cpp3
-rw-r--r--scene/3d/vehicle_body_3d.cpp1
-rw-r--r--scene/3d/voxelizer.cpp1
-rw-r--r--scene/animation/animation_player.h1
-rw-r--r--scene/animation/tween.h1
-rw-r--r--scene/gui/control.cpp191
-rw-r--r--scene/gui/control.h55
-rw-r--r--scene/gui/label.h2
-rw-r--r--scene/gui/line_edit.h1
-rw-r--r--scene/gui/popup.cpp14
-rw-r--r--scene/gui/popup.h5
-rw-r--r--scene/gui/popup_menu.cpp50
-rw-r--r--scene/gui/popup_menu.h8
-rw-r--r--scene/gui/rich_text_label.h4
-rw-r--r--scene/gui/tab_container.h1
-rw-r--r--scene/gui/tabs.h2
-rw-r--r--scene/gui/tree.cpp1
-rw-r--r--scene/gui/tree.h1
-rw-r--r--scene/main/node.cpp1
-rw-r--r--scene/main/node.h3
-rw-r--r--scene/main/scene_tree.cpp3
-rw-r--r--scene/main/timer.cpp4
-rw-r--r--scene/main/viewport.cpp2
-rw-r--r--scene/main/viewport.h1
-rw-r--r--scene/main/window.h1
-rw-r--r--scene/resources/animation.cpp3
-rw-r--r--scene/resources/audio_stream_sample.cpp3
-rw-r--r--scene/resources/capsule_shape_3d.cpp4
-rw-r--r--scene/resources/cylinder_shape_3d.cpp4
-rw-r--r--scene/resources/mesh.cpp5
-rw-r--r--scene/resources/mesh.h3
-rw-r--r--scene/resources/ray_shape_3d.cpp2
-rw-r--r--scene/resources/shader.h1
-rw-r--r--scene/resources/sphere_shape_3d.cpp2
-rw-r--r--scene/resources/texture.cpp15
-rw-r--r--scene/resources/texture.h1
-rw-r--r--scene/resources/theme.cpp286
-rw-r--r--scene/resources/theme.h80
-rw-r--r--scene/resources/visual_shader.cpp1
-rw-r--r--servers/audio/effects/audio_effect_chorus.h1
-rw-r--r--servers/audio/effects/audio_effect_delay.h1
-rw-r--r--servers/audio/effects/audio_effect_pitch_shift.cpp12
-rw-r--r--servers/audio/effects/audio_effect_stereo_enhance.h1
-rw-r--r--servers/audio/effects/eq.h1
-rw-r--r--servers/audio/effects/reverb.cpp2
-rw-r--r--servers/audio/effects/reverb.h1
-rw-r--r--servers/audio_server.h1
-rw-r--r--servers/display_server.h1
-rw-r--r--servers/physics_2d/physics_server_2d_sw.cpp2
-rw-r--r--servers/physics_2d/space_2d_sw.cpp1
-rw-r--r--servers/physics_2d/space_2d_sw.h1
-rw-r--r--servers/physics_3d/body_3d_sw.cpp3
-rw-r--r--servers/physics_3d/body_pair_3d_sw.h1
-rw-r--r--servers/physics_3d/gjk_epa.cpp23
-rw-r--r--servers/physics_3d/joints/generic_6dof_joint_3d_sw.cpp1
-rw-r--r--servers/physics_3d/joints/hinge_joint_3d_sw.cpp1
-rw-r--r--servers/physics_3d/joints/slider_joint_3d_sw.cpp1
-rw-r--r--servers/physics_3d/physics_server_3d_sw.cpp9
-rw-r--r--servers/physics_3d/physics_server_3d_sw.h2
-rw-r--r--servers/physics_3d/shape_3d_sw.cpp1
-rw-r--r--servers/physics_3d/space_3d_sw.h1
-rw-r--r--servers/physics_server_2d.h3
-rw-r--r--servers/physics_server_3d.h6
-rw-r--r--servers/rendering/rasterizer.h2
-rw-r--r--servers/rendering/rasterizer_rd/rasterizer_canvas_rd.cpp8
-rw-r--r--servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp2
-rw-r--r--servers/rendering/rasterizer_rd/rasterizer_scene_rd.cpp4
-rw-r--r--servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp1
-rw-r--r--servers/rendering/rasterizer_rd/shader_compiler_rd.cpp1
-rw-r--r--servers/rendering/rasterizer_rd/shaders/scene_high_end.glsl2
-rw-r--r--servers/rendering/rendering_server_canvas.cpp2
-rw-r--r--servers/rendering/rendering_server_raster.h1
-rw-r--r--servers/rendering/rendering_server_scene.h1
-rw-r--r--servers/rendering/shader_language.cpp1
-rw-r--r--servers/rendering_server.cpp1
-rw-r--r--tests/test_astar.h1
-rw-r--r--tests/test_basis.h1
-rw-r--r--tests/test_class_db.h1
-rw-r--r--tests/test_color.h1
-rw-r--r--tests/test_command_queue.h1
-rw-r--r--tests/test_config_file.h156
-rw-r--r--tests/test_curve.h221
-rw-r--r--tests/test_expression.h1
-rw-r--r--tests/test_gradient.h1
-rw-r--r--tests/test_gui.cpp1
-rw-r--r--tests/test_json.h166
-rw-r--r--tests/test_list.h1
-rw-r--r--tests/test_main.cpp10
-rw-r--r--tests/test_math.cpp1
-rw-r--r--tests/test_method_bind.h1
-rw-r--r--tests/test_node_path.h172
-rw-r--r--tests/test_oa_hash_map.cpp1
-rw-r--r--tests/test_ordered_hash_map.h1
-rw-r--r--tests/test_pck_packer.h114
-rw-r--r--tests/test_physics_2d.cpp1
-rw-r--r--tests/test_physics_3d.cpp1
-rw-r--r--tests/test_rect2.h467
-rw-r--r--tests/test_render.cpp3
-rw-r--r--tests/test_shader_lang.cpp1
-rw-r--r--tests/test_string.h1
-rw-r--r--tests/test_variant.h1
-rw-r--r--thirdparty/README.md6
-rw-r--r--thirdparty/doctest/LICENSE.txt2
-rw-r--r--thirdparty/doctest/doctest.h337
-rw-r--r--thirdparty/doctest/patches/fix-arm64-mac.patch18
398 files changed, 11237 insertions, 5219 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index 31f51c2854..011514ef04 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -128,7 +128,7 @@ License: Expat
Files: ./thirdparty/doctest/
Comment: doctest
-Copyright: 2016-2019, Viktor Kirilov
+Copyright: 2016-2020, Viktor Kirilov
License: Expat
Files: ./thirdparty/enet/
diff --git a/core/config/engine.cpp b/core/config/engine.cpp
index b0037ffb37..8e2ab094b0 100644
--- a/core/config/engine.cpp
+++ b/core/config/engine.cpp
@@ -219,3 +219,13 @@ Engine *Engine::get_singleton() {
Engine::Engine() {
singleton = this;
}
+
+Engine::Singleton::Singleton(const StringName &p_name, Object *p_ptr) :
+ name(p_name),
+ ptr(p_ptr) {
+#ifdef DEBUG_ENABLED
+ if (Object::cast_to<Reference>(p_ptr)) {
+ ERR_PRINT("A class intended to be used as a singleton must *not* inherit from Reference.");
+ }
+#endif
+}
diff --git a/core/config/engine.h b/core/config/engine.h
index 1d3d963b39..0d9aa02f28 100644
--- a/core/config/engine.h
+++ b/core/config/engine.h
@@ -41,10 +41,7 @@ public:
struct Singleton {
StringName name;
Object *ptr;
- Singleton(const StringName &p_name = StringName(), Object *p_ptr = nullptr) :
- name(p_name),
- ptr(p_ptr) {
- }
+ Singleton(const StringName &p_name = StringName(), Object *p_ptr = nullptr);
};
private:
diff --git a/core/core_bind.h b/core/core_bind.h
index 7794750387..4a642c47ce 100644
--- a/core/core_bind.h
+++ b/core/core_bind.h
@@ -83,7 +83,6 @@ protected:
public:
enum SaverFlags {
-
FLAG_RELATIVE_PATHS = 1,
FLAG_BUNDLE_RESOURCES = 2,
FLAG_CHANGE_PATH = 4,
@@ -361,7 +360,6 @@ protected:
public:
enum ModeFlags {
-
READ = 1,
WRITE = 2,
READ_WRITE = 3,
@@ -561,7 +559,6 @@ protected:
public:
enum Priority {
-
PRIORITY_LOW,
PRIORITY_NORMAL,
PRIORITY_HIGH,
diff --git a/core/core_constants.cpp b/core/core_constants.cpp
index 4229436e84..64bfff1c58 100644
--- a/core/core_constants.cpp
+++ b/core/core_constants.cpp
@@ -409,7 +409,7 @@ void register_global_constants() {
BIND_CORE_ENUM_CONSTANT(BUTTON_MASK_XBUTTON2);
// Joypad buttons
- BIND_CORE_ENUM_CONSTANT(JOY_INVALID_BUTTON);
+ BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_INVALID);
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_A);
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_B);
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_X);
@@ -425,51 +425,18 @@ void register_global_constants() {
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_DOWN);
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_LEFT);
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_DPAD_RIGHT);
- BIND_CORE_ENUM_CONSTANT(JOY_SDL_BUTTONS);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_X);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_CROSS);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_CIRCLE);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_SQUARE);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_TRIANGLE);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_SELECT);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_START);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_PS);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_L1);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_R1);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_L3);
- BIND_CORE_ENUM_CONSTANT(JOY_SONY_R3);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_A);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_B);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_X);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_BACK);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_START);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_HOME);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_LS);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_RS);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_LB);
- BIND_CORE_ENUM_CONSTANT(JOY_XBOX_RB);
+ BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_SDL_MAX);
BIND_CORE_ENUM_CONSTANT(JOY_BUTTON_MAX);
// Joypad axes
- BIND_CORE_ENUM_CONSTANT(JOY_INVALID_AXIS);
+ BIND_CORE_ENUM_CONSTANT(JOY_AXIS_INVALID);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_LEFT_X);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_LEFT_Y);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_RIGHT_X);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_RIGHT_Y);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_TRIGGER_LEFT);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_TRIGGER_RIGHT);
- BIND_CORE_ENUM_CONSTANT(JOY_SDL_AXES);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_0_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_0_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_1_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_1_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_2_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_2_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_3_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_3_Y);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_4_X);
- BIND_CORE_ENUM_CONSTANT(JOY_AXIS_4_Y);
+ BIND_CORE_ENUM_CONSTANT(JOY_AXIS_SDL_MAX);
BIND_CORE_ENUM_CONSTANT(JOY_AXIS_MAX);
// midi
diff --git a/core/input/input.cpp b/core/input/input.cpp
index ee66bf94cb..00a7e63a73 100644
--- a/core/input/input.cpp
+++ b/core/input/input.cpp
@@ -39,7 +39,7 @@
#include "editor/editor_settings.h"
#endif
-static const char *_joy_buttons[JOY_SDL_BUTTONS + 1] = {
+static const char *_joy_buttons[JOY_BUTTON_SDL_MAX] = {
"a",
"b",
"x",
@@ -55,69 +55,15 @@ static const char *_joy_buttons[JOY_SDL_BUTTONS + 1] = {
"dpdown",
"dpleft",
"dpright",
- nullptr
};
-static const char *_joy_button_names[JOY_BUTTON_MAX] = {
- "Face Bottom",
- "Face Right",
- "Face Left",
- "Face Top",
- "Select",
- "Guide",
- "Start",
- "Left Stick",
- "Right Stick",
- "Left Shoulder",
- "Right Shoulder",
- "D-Pad Up",
- "D-Pad Down",
- "D-Pad Left",
- "D-Pad Right",
- "Button 15",
- "Button 16",
- "Button 17",
- "Button 18",
- "Button 19",
- "Button 20",
- "Button 21",
- "Button 22",
- "Button 23",
- "Button 24",
- "Button 25",
- "Button 26",
- "Button 27",
- "Button 28",
- "Button 29",
- "Button 30",
- "Button 31",
- "Button 32",
- "Button 33",
- "Button 34",
- "Button 35"
-};
-
-static const char *_joy_axes[JOY_SDL_AXES + 1] = {
+static const char *_joy_axes[JOY_AXIS_SDL_MAX] = {
"leftx",
"lefty",
"rightx",
"righty",
"lefttrigger",
"righttrigger",
- nullptr
-};
-
-static const char *_joy_axis_names[JOY_AXIS_MAX] = {
- "Left Stick X",
- "Left Stick Y",
- "Right Stick X",
- "Right Stick Y",
- "Left Trigger",
- "Right Trigger",
- "Joystick 3 Stick X",
- "Joystick 3 Stick Y",
- "Joystick 4 Stick X",
- "Joystick 4 Stick Y"
};
Input *Input::singleton = nullptr;
@@ -149,6 +95,9 @@ void Input::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_action_just_pressed", "action"), &Input::is_action_just_pressed);
ClassDB::bind_method(D_METHOD("is_action_just_released", "action"), &Input::is_action_just_released);
ClassDB::bind_method(D_METHOD("get_action_strength", "action"), &Input::get_action_strength);
+ ClassDB::bind_method(D_METHOD("get_action_raw_strength", "action"), &Input::get_action_strength);
+ ClassDB::bind_method(D_METHOD("get_axis", "negative_action", "positive_action"), &Input::get_axis);
+ ClassDB::bind_method(D_METHOD("get_vector", "negative_x", "positive_x", "negative_y", "positive_y", "deadzone"), &Input::get_vector, DEFVAL(-1.0f));
ClassDB::bind_method(D_METHOD("add_joy_mapping", "mapping", "update_existing"), &Input::add_joy_mapping, DEFVAL(false));
ClassDB::bind_method(D_METHOD("remove_joy_mapping", "guid"), &Input::remove_joy_mapping);
ClassDB::bind_method(D_METHOD("joy_connection_changed", "device", "connected", "name", "guid"), &Input::joy_connection_changed);
@@ -159,10 +108,6 @@ void Input::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_connected_joypads"), &Input::get_connected_joypads);
ClassDB::bind_method(D_METHOD("get_joy_vibration_strength", "device"), &Input::get_joy_vibration_strength);
ClassDB::bind_method(D_METHOD("get_joy_vibration_duration", "device"), &Input::get_joy_vibration_duration);
- ClassDB::bind_method(D_METHOD("get_joy_button_string", "button_index"), &Input::get_joy_button_string);
- ClassDB::bind_method(D_METHOD("get_joy_button_index_from_string", "button"), &Input::get_joy_button_index_from_string);
- ClassDB::bind_method(D_METHOD("get_joy_axis_string", "axis_index"), &Input::get_joy_axis_string);
- ClassDB::bind_method(D_METHOD("get_joy_axis_index_from_string", "axis"), &Input::get_joy_axis_index_from_string);
ClassDB::bind_method(D_METHOD("start_joy_vibration", "device", "weak_magnitude", "strong_magnitude", "duration"), &Input::start_joy_vibration, DEFVAL(0));
ClassDB::bind_method(D_METHOD("stop_joy_vibration", "device"), &Input::stop_joy_vibration);
ClassDB::bind_method(D_METHOD("vibrate_handheld", "duration_ms"), &Input::vibrate_handheld, DEFVAL(500));
@@ -215,7 +160,9 @@ void Input::get_argument_options(const StringName &p_function, int p_idx, List<S
const String quote_style = EDITOR_DEF("text_editor/completion/use_single_quotes", 0) ? "'" : "\"";
String pf = p_function;
- if (p_idx == 0 && (pf == "is_action_pressed" || pf == "action_press" || pf == "action_release" || pf == "is_action_just_pressed" || pf == "is_action_just_released" || pf == "get_action_strength")) {
+ if (p_idx == 0 && (pf == "is_action_pressed" || pf == "action_press" || pf == "action_release" ||
+ pf == "is_action_just_pressed" || pf == "is_action_just_released" ||
+ pf == "get_action_strength" || pf == "get_axis" || pf == "get_vector")) {
List<PropertyInfo> pinfo;
ProjectSettings::get_singleton()->get_property_list(&pinfo);
@@ -326,6 +273,46 @@ float Input::get_action_strength(const StringName &p_action) const {
return E->get().strength;
}
+float Input::get_action_raw_strength(const StringName &p_action) const {
+ const Map<StringName, Action>::Element *E = action_state.find(p_action);
+ if (!E) {
+ return 0.0f;
+ }
+
+ return E->get().raw_strength;
+}
+
+float Input::get_axis(const StringName &p_negative_action, const StringName &p_positive_action) const {
+ return get_action_strength(p_positive_action) - get_action_strength(p_negative_action);
+}
+
+Vector2 Input::get_vector(const StringName &p_negative_x, const StringName &p_positive_x, const StringName &p_negative_y, const StringName &p_positive_y, float p_deadzone) const {
+ Vector2 vector = Vector2(
+ get_action_raw_strength(p_positive_x) - get_action_raw_strength(p_negative_x),
+ get_action_raw_strength(p_positive_y) - get_action_raw_strength(p_negative_y));
+
+ if (p_deadzone < 0.0f) {
+ // If the deadzone isn't specified, get it from the average of the actions.
+ p_deadzone = (InputMap::get_singleton()->action_get_deadzone(p_positive_x) +
+ InputMap::get_singleton()->action_get_deadzone(p_negative_x) +
+ InputMap::get_singleton()->action_get_deadzone(p_positive_y) +
+ InputMap::get_singleton()->action_get_deadzone(p_negative_y)) /
+ 4;
+ }
+
+ // Circular length limiting and deadzone.
+ float length = vector.length();
+ if (length <= p_deadzone) {
+ return Vector2();
+ } else if (length > 1.0f) {
+ return vector / length;
+ } else {
+ // Inverse lerp length to map (p_deadzone, 1) to (0, 1).
+ return vector * (Math::inverse_lerp(p_deadzone, 1.0f, length) / length);
+ }
+ return vector;
+}
+
float Input::get_joy_axis(int p_device, int p_axis) const {
_THREAD_SAFE_METHOD_
int c = _combine_device(p_axis, p_device);
@@ -603,10 +590,12 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
action.physics_frame = Engine::get_singleton()->get_physics_frames();
action.idle_frame = Engine::get_singleton()->get_idle_frames();
action.pressed = p_event->is_action_pressed(E->key());
- action.strength = 0.f;
+ action.strength = 0.0f;
+ action.raw_strength = 0.0f;
action_state[E->key()] = action;
}
action_state[E->key()].strength = p_event->get_action_strength(E->key());
+ action_state[E->key()].raw_strength = p_event->get_action_raw_strength(E->key());
}
}
@@ -890,14 +879,6 @@ void Input::joy_axis(int p_device, int p_axis, const JoyAxis &p_value) {
return;
}
- if (p_value.value > joy.last_axis[p_axis]) {
- if (p_value.value < joy.last_axis[p_axis] + joy.filter) {
- return;
- }
- } else if (p_value.value > joy.last_axis[p_axis] - joy.filter) {
- return;
- }
-
//when changing direction quickly, insert fake event to release pending inputmap actions
float last = joy.last_axis[p_axis];
if (p_value.min == 0 && (last < 0.25 || last > 0.75) && (last - 0.5) * (p_value.value - 0.5) < 0) {
@@ -1187,21 +1168,21 @@ void Input::_get_mapped_hat_events(const JoyDeviceMapping &mapping, int p_hat, J
}
JoyButtonList Input::_get_output_button(String output) {
- for (int i = 0; _joy_buttons[i]; i++) {
+ for (int i = 0; i < JOY_BUTTON_SDL_MAX; i++) {
if (output == _joy_buttons[i]) {
return JoyButtonList(i);
}
}
- return JoyButtonList::JOY_INVALID_BUTTON;
+ return JoyButtonList::JOY_BUTTON_INVALID;
}
JoyAxisList Input::_get_output_axis(String output) {
- for (int i = 0; _joy_axes[i]; i++) {
+ for (int i = 0; i < JOY_AXIS_SDL_MAX; i++) {
if (output == _joy_axes[i]) {
return JoyAxisList(i);
}
}
- return JoyAxisList::JOY_INVALID_AXIS;
+ return JoyAxisList::JOY_AXIS_INVALID;
}
void Input::parse_mapping(String p_mapping) {
@@ -1261,16 +1242,16 @@ void Input::parse_mapping(String p_mapping) {
JoyButtonList output_button = _get_output_button(output);
JoyAxisList output_axis = _get_output_axis(output);
- ERR_CONTINUE_MSG(output_button == JOY_INVALID_BUTTON && output_axis == JOY_INVALID_AXIS,
+ ERR_CONTINUE_MSG(output_button == JOY_BUTTON_INVALID && output_axis == JOY_AXIS_INVALID,
String(entry[idx] + "\nUnrecognised output string: " + output));
- ERR_CONTINUE_MSG(output_button != JOY_INVALID_BUTTON && output_axis != JOY_INVALID_AXIS,
+ ERR_CONTINUE_MSG(output_button != JOY_BUTTON_INVALID && output_axis != JOY_AXIS_INVALID,
String("BUG: Output string matched both button and axis: " + output));
JoyBinding binding;
- if (output_button != JOY_INVALID_BUTTON) {
+ if (output_button != JOY_BUTTON_INVALID) {
binding.outputType = TYPE_BUTTON;
binding.output.button = output_button;
- } else if (output_axis != JOY_INVALID_AXIS) {
+ } else if (output_axis != JOY_AXIS_INVALID) {
binding.outputType = TYPE_AXIS;
binding.output.axis.axis = output_axis;
binding.output.axis.range = output_range;
@@ -1362,20 +1343,6 @@ Array Input::get_connected_joypads() {
return ret;
}
-String Input::get_joy_button_string(int p_button) {
- ERR_FAIL_INDEX_V(p_button, JOY_BUTTON_MAX, "Invalid button");
- return _joy_button_names[p_button];
-}
-
-int Input::get_joy_button_index_from_string(String p_button) {
- for (int i = 0; i < JOY_BUTTON_MAX; i++) {
- if (p_button == _joy_button_names[i]) {
- return i;
- }
- }
- ERR_FAIL_V(JOY_INVALID_BUTTON);
-}
-
int Input::get_unused_joy_id() {
for (int i = 0; i < JOYPADS_MAX; i++) {
if (!joy_names.has(i) || !joy_names[i].connected) {
@@ -1385,20 +1352,6 @@ int Input::get_unused_joy_id() {
return -1;
}
-String Input::get_joy_axis_string(int p_axis) {
- ERR_FAIL_INDEX_V(p_axis, JOY_AXIS_MAX, "Invalid axis");
- return _joy_axis_names[p_axis];
-}
-
-int Input::get_joy_axis_index_from_string(String p_axis) {
- for (int i = 0; i < JOY_AXIS_MAX; i++) {
- if (p_axis == _joy_axis_names[i]) {
- return i;
- }
- }
- ERR_FAIL_V(JOY_INVALID_AXIS);
-}
-
Input::Input() {
singleton = this;
diff --git a/core/input/input.h b/core/input/input.h
index 98bbff6441..1b2df49ac0 100644
--- a/core/input/input.h
+++ b/core/input/input.h
@@ -117,6 +117,7 @@ private:
uint64_t idle_frame;
bool pressed;
float strength;
+ float raw_strength;
};
Map<StringName, Action> action_state;
@@ -146,7 +147,6 @@ private:
bool connected = false;
bool last_buttons[JOY_BUTTON_MAX] = { false };
float last_axis[JOY_AXIS_MAX] = { 0.0f };
- float filter = 0.01f;
int last_hat = HAT_MASK_CENTER;
int mapping = -1;
int hat_current = 0;
@@ -223,7 +223,6 @@ private:
JoyAxisList _get_output_axis(String output);
void _button_event(int p_device, int p_index, bool p_pressed);
void _axis_event(int p_device, int p_axis, float p_value);
- float _handle_deadzone(int p_device, int p_axis, float p_value);
void _parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated);
@@ -266,6 +265,10 @@ public:
bool is_action_just_pressed(const StringName &p_action) const;
bool is_action_just_released(const StringName &p_action) const;
float get_action_strength(const StringName &p_action) const;
+ float get_action_raw_strength(const StringName &p_action) const;
+
+ float get_axis(const StringName &p_negative_action, const StringName &p_positive_action) const;
+ Vector2 get_vector(const StringName &p_negative_x, const StringName &p_positive_x, const StringName &p_negative_y, const StringName &p_positive_y, float p_deadzone = -1.0f) const;
float get_joy_axis(int p_device, int p_axis) const;
String get_joy_name(int p_idx);
@@ -327,11 +330,6 @@ public:
void add_joy_mapping(String p_mapping, bool p_update_existing = false);
void remove_joy_mapping(String p_guid);
- String get_joy_button_string(int p_button);
- String get_joy_axis_string(int p_axis);
- int get_joy_axis_index_from_string(String p_axis);
- int get_joy_button_index_from_string(String p_button);
-
int get_unused_joy_id();
bool is_joy_known(int p_device);
diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp
index 6ba082f86f..41bc5e84b0 100644
--- a/core/input/input_event.cpp
+++ b/core/input/input_event.cpp
@@ -61,12 +61,17 @@ bool InputEvent::is_action_released(const StringName &p_action) const {
}
float InputEvent::get_action_strength(const StringName &p_action) const {
- bool pressed;
float strength;
- bool valid = InputMap::get_singleton()->event_get_action_status(Ref<InputEvent>((InputEvent *)this), p_action, &pressed, &strength);
+ bool valid = InputMap::get_singleton()->event_get_action_status(Ref<InputEvent>((InputEvent *)this), p_action, nullptr, &strength);
return valid ? strength : 0.0f;
}
+float InputEvent::get_action_raw_strength(const StringName &p_action) const {
+ float raw_strength;
+ bool valid = InputMap::get_singleton()->event_get_action_status(Ref<InputEvent>((InputEvent *)this), p_action, nullptr, nullptr, &raw_strength);
+ return valid ? raw_strength : 0.0f;
+}
+
bool InputEvent::is_pressed() const {
return false;
}
@@ -83,7 +88,7 @@ String InputEvent::as_text() const {
return String();
}
-bool InputEvent::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+bool InputEvent::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const {
return false;
}
@@ -138,6 +143,14 @@ int64_t InputEventFromWindow::get_window_id() const {
///////////////////////////////////
+void InputEventWithModifiers::set_store_command(bool p_enabled) {
+ store_command = p_enabled;
+}
+
+bool InputEventWithModifiers::is_storing_command() const {
+ return store_command;
+}
+
void InputEventWithModifiers::set_shift(bool p_enabled) {
shift = p_enabled;
}
@@ -186,6 +199,9 @@ void InputEventWithModifiers::set_modifiers_from_event(const InputEventWithModif
}
void InputEventWithModifiers::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_store_command", "enable"), &InputEventWithModifiers::set_store_command);
+ ClassDB::bind_method(D_METHOD("is_storing_command"), &InputEventWithModifiers::is_storing_command);
+
ClassDB::bind_method(D_METHOD("set_alt", "enable"), &InputEventWithModifiers::set_alt);
ClassDB::bind_method(D_METHOD("get_alt"), &InputEventWithModifiers::get_alt);
@@ -201,6 +217,7 @@ void InputEventWithModifiers::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_command", "enable"), &InputEventWithModifiers::set_command);
ClassDB::bind_method(D_METHOD("get_command"), &InputEventWithModifiers::get_command);
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "store_command"), "set_store_command", "is_storing_command");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "alt"), "set_alt", "get_alt");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shift"), "set_shift", "get_shift");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "control"), "set_control", "get_control");
@@ -208,6 +225,28 @@ void InputEventWithModifiers::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "command"), "set_command", "get_command");
}
+void InputEventWithModifiers::_validate_property(PropertyInfo &property) const {
+ if (store_command) {
+ // If we only want to Store "Command".
+#ifdef APPLE_STYLE_KEYS
+ // Don't store "Meta" on Mac.
+ if (property.name == "meta") {
+ property.usage ^= PROPERTY_USAGE_STORAGE;
+ }
+#else
+ // Don't store "Control".
+ if (property.name == "control") {
+ property.usage ^= PROPERTY_USAGE_STORAGE;
+ }
+#endif
+ } else {
+ // We don't want to store command, only control or meta (on mac).
+ if (property.name == "command") {
+ property.usage ^= PROPERTY_USAGE_STORAGE;
+ }
+ }
+}
+
///////////////////////////////////
void InputEventKey::set_pressed(bool p_pressed) {
@@ -307,7 +346,7 @@ String InputEventKey::as_text() const {
return kc;
}
-bool InputEventKey::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+bool InputEventKey::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const {
Ref<InputEventKey> key = p_event;
if (key.is_null()) {
return false;
@@ -329,8 +368,12 @@ bool InputEventKey::action_match(const Ref<InputEvent> &p_event, bool *p_pressed
if (p_pressed != nullptr) {
*p_pressed = key->is_pressed();
}
+ float strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
if (p_strength != nullptr) {
- *p_strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
+ *p_strength = strength;
+ }
+ if (p_raw_strength != nullptr) {
+ *p_raw_strength = strength;
}
}
return match;
@@ -470,7 +513,7 @@ Ref<InputEvent> InputEventMouseButton::xformed_by(const Transform2D &p_xform, co
return mb;
}
-bool InputEventMouseButton::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+bool InputEventMouseButton::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const {
Ref<InputEventMouseButton> mb = p_event;
if (mb.is_null()) {
return false;
@@ -481,8 +524,12 @@ bool InputEventMouseButton::action_match(const Ref<InputEvent> &p_event, bool *p
if (p_pressed != nullptr) {
*p_pressed = mb->is_pressed();
}
+ float strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
if (p_strength != nullptr) {
- *p_strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
+ *p_strength = strength;
+ }
+ if (p_raw_strength != nullptr) {
+ *p_raw_strength = strength;
}
}
@@ -713,7 +760,7 @@ bool InputEventJoypadMotion::is_pressed() const {
return Math::abs(axis_value) >= 0.5f;
}
-bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const {
Ref<InputEventJoypadMotion> jm = p_event;
if (jm.is_null()) {
return false;
@@ -721,8 +768,9 @@ bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event, bool *
bool match = (axis == jm->axis); // Matches even if not in the same direction, but returns a "not pressed" event.
if (match) {
+ float jm_abs_axis_value = Math::abs(jm->get_axis_value());
bool same_direction = (((axis_value < 0) == (jm->axis_value < 0)) || jm->axis_value == 0);
- bool pressed = same_direction ? Math::abs(jm->get_axis_value()) >= p_deadzone : false;
+ bool pressed = same_direction && jm_abs_axis_value >= p_deadzone;
if (p_pressed != nullptr) {
*p_pressed = pressed;
}
@@ -731,12 +779,19 @@ bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event, bool *
if (p_deadzone == 1.0f) {
*p_strength = 1.0f;
} else {
- *p_strength = CLAMP(Math::inverse_lerp(p_deadzone, 1.0f, Math::abs(jm->get_axis_value())), 0.0f, 1.0f);
+ *p_strength = CLAMP(Math::inverse_lerp(p_deadzone, 1.0f, jm_abs_axis_value), 0.0f, 1.0f);
}
} else {
*p_strength = 0.0f;
}
}
+ if (p_raw_strength != nullptr) {
+ if (same_direction) { // NOT pressed, because we want to ignore the deadzone.
+ *p_raw_strength = jm_abs_axis_value;
+ } else {
+ *p_raw_strength = 0.0f;
+ }
+ }
}
return match;
}
@@ -782,7 +837,7 @@ float InputEventJoypadButton::get_pressure() const {
return pressure;
}
-bool InputEventJoypadButton::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+bool InputEventJoypadButton::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const {
Ref<InputEventJoypadButton> jb = p_event;
if (jb.is_null()) {
return false;
@@ -793,8 +848,12 @@ bool InputEventJoypadButton::action_match(const Ref<InputEvent> &p_event, bool *
if (p_pressed != nullptr) {
*p_pressed = jb->is_pressed();
}
+ float strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
if (p_strength != nullptr) {
- *p_strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
+ *p_strength = strength;
+ }
+ if (p_raw_strength != nullptr) {
+ *p_raw_strength = strength;
}
}
@@ -997,7 +1056,7 @@ bool InputEventAction::is_action(const StringName &p_action) const {
return action == p_action;
}
-bool InputEventAction::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+bool InputEventAction::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const {
Ref<InputEventAction> act = p_event;
if (act.is_null()) {
return false;
@@ -1008,8 +1067,12 @@ bool InputEventAction::action_match(const Ref<InputEvent> &p_event, bool *p_pres
if (p_pressed != nullptr) {
*p_pressed = act->pressed;
}
+ float strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
if (p_strength != nullptr) {
- *p_strength = (p_pressed != nullptr && *p_pressed) ? 1.0f : 0.0f;
+ *p_strength = strength;
+ }
+ if (p_raw_strength != nullptr) {
+ *p_raw_strength = strength;
}
}
return match;
diff --git a/core/input/input_event.h b/core/input/input_event.h
index 8b58cf08c2..0eae3a2bbe 100644
--- a/core/input/input_event.h
+++ b/core/input/input_event.h
@@ -60,10 +60,7 @@ enum ButtonList {
};
enum JoyButtonList {
-
- JOY_INVALID_BUTTON = -1,
-
- // SDL Buttons
+ JOY_BUTTON_INVALID = -1,
JOY_BUTTON_A = 0,
JOY_BUTTON_B = 1,
JOY_BUTTON_X = 2,
@@ -79,64 +76,20 @@ enum JoyButtonList {
JOY_BUTTON_DPAD_DOWN = 12,
JOY_BUTTON_DPAD_LEFT = 13,
JOY_BUTTON_DPAD_RIGHT = 14,
- JOY_SDL_BUTTONS = 15,
-
- // Sony Buttons
- JOY_SONY_X = JOY_BUTTON_A,
- JOY_SONY_CROSS = JOY_BUTTON_A,
- JOY_SONY_CIRCLE = JOY_BUTTON_B,
- JOY_SONY_SQUARE = JOY_BUTTON_X,
- JOY_SONY_TRIANGLE = JOY_BUTTON_Y,
- JOY_SONY_SELECT = JOY_BUTTON_BACK,
- JOY_SONY_START = JOY_BUTTON_START,
- JOY_SONY_PS = JOY_BUTTON_GUIDE,
- JOY_SONY_L1 = JOY_BUTTON_LEFT_SHOULDER,
- JOY_SONY_R1 = JOY_BUTTON_RIGHT_SHOULDER,
- JOY_SONY_L3 = JOY_BUTTON_LEFT_STICK,
- JOY_SONY_R3 = JOY_BUTTON_RIGHT_STICK,
-
- // Xbox Buttons
- JOY_XBOX_A = JOY_BUTTON_A,
- JOY_XBOX_B = JOY_BUTTON_B,
- JOY_XBOX_X = JOY_BUTTON_X,
- JOY_XBOX_Y = JOY_BUTTON_Y,
- JOY_XBOX_BACK = JOY_BUTTON_BACK,
- JOY_XBOX_START = JOY_BUTTON_START,
- JOY_XBOX_HOME = JOY_BUTTON_GUIDE,
- JOY_XBOX_LS = JOY_BUTTON_LEFT_STICK,
- JOY_XBOX_RS = JOY_BUTTON_RIGHT_STICK,
- JOY_XBOX_LB = JOY_BUTTON_LEFT_SHOULDER,
- JOY_XBOX_RB = JOY_BUTTON_RIGHT_SHOULDER,
-
- JOY_BUTTON_MAX = 36 // Apparently Android supports up to 36 buttons.
+ JOY_BUTTON_SDL_MAX = 15,
+ JOY_BUTTON_MAX = 36, // Android supports up to 36 buttons.
};
enum JoyAxisList {
-
- JOY_INVALID_AXIS = -1,
-
- // SDL Axes
+ JOY_AXIS_INVALID = -1,
JOY_AXIS_LEFT_X = 0,
JOY_AXIS_LEFT_Y = 1,
JOY_AXIS_RIGHT_X = 2,
JOY_AXIS_RIGHT_Y = 3,
JOY_AXIS_TRIGGER_LEFT = 4,
JOY_AXIS_TRIGGER_RIGHT = 5,
- JOY_SDL_AXES = 6,
-
- // Joystick axes.
- JOY_AXIS_0_X = 0,
- JOY_AXIS_0_Y = 1,
- JOY_AXIS_1_X = 2,
- JOY_AXIS_1_Y = 3,
- JOY_AXIS_2_X = 4,
- JOY_AXIS_2_Y = 5,
- JOY_AXIS_3_X = 6,
- JOY_AXIS_3_Y = 7,
- JOY_AXIS_4_X = 8,
- JOY_AXIS_4_Y = 9,
-
- JOY_AXIS_MAX = 10 // OpenVR supports up to 5 Joysticks making a total of 10 axes.
+ JOY_AXIS_SDL_MAX = 6,
+ JOY_AXIS_MAX = 10, // OpenVR supports up to 5 Joysticks making a total of 10 axes.
};
enum MidiMessageList {
@@ -173,6 +126,7 @@ public:
bool is_action_pressed(const StringName &p_action, bool p_allow_echo = false) const;
bool is_action_released(const StringName &p_action) const;
float get_action_strength(const StringName &p_action) const;
+ float get_action_raw_strength(const StringName &p_action) const;
// To be removed someday, since they do not make sense for all events
virtual bool is_pressed() const;
@@ -182,7 +136,7 @@ public:
virtual Ref<InputEvent> xformed_by(const Transform2D &p_xform, const Vector2 &p_local_ofs = Vector2()) const;
- virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const;
+ virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const;
virtual bool shortcut_match(const Ref<InputEvent> &p_event) const;
virtual bool is_action_type() const;
@@ -209,6 +163,8 @@ public:
class InputEventWithModifiers : public InputEventFromWindow {
GDCLASS(InputEventWithModifiers, InputEventFromWindow);
+ bool store_command = true;
+
bool shift = false;
bool alt = false;
#ifdef APPLE_STYLE_KEYS
@@ -228,8 +184,12 @@ class InputEventWithModifiers : public InputEventFromWindow {
protected:
static void _bind_methods();
+ virtual void _validate_property(PropertyInfo &property) const override;
public:
+ void set_store_command(bool p_enabled);
+ bool is_storing_command() const;
+
void set_shift(bool p_enabled);
bool get_shift() const;
@@ -283,7 +243,7 @@ public:
uint32_t get_keycode_with_modifiers() const;
uint32_t get_physical_keycode_with_modifiers() const;
- virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const override;
+ virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const override;
virtual bool shortcut_match(const Ref<InputEvent> &p_event) const override;
virtual bool is_action_type() const override { return true; }
@@ -342,7 +302,7 @@ public:
bool is_doubleclick() const;
virtual Ref<InputEvent> xformed_by(const Transform2D &p_xform, const Vector2 &p_local_ofs = Vector2()) const override;
- virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const override;
+ virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const override;
virtual bool is_action_type() const override { return true; }
virtual String as_text() const override;
@@ -399,7 +359,7 @@ public:
virtual bool is_pressed() const override;
- virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const override;
+ virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const override;
virtual bool is_action_type() const override { return true; }
virtual String as_text() const override;
@@ -426,7 +386,7 @@ public:
void set_pressure(float p_pressure);
float get_pressure() const;
- virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const override;
+ virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const override;
virtual bool shortcut_match(const Ref<InputEvent> &p_event) const override;
virtual bool is_action_type() const override { return true; }
@@ -511,7 +471,7 @@ public:
virtual bool is_action(const StringName &p_action) const;
- virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const override;
+ virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength, float p_deadzone) const override;
virtual bool shortcut_match(const Ref<InputEvent> &p_event) const override;
virtual bool is_action_type() const override { return true; }
diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp
index ba1de3c58d..979809c7af 100644
--- a/core/input/input_map.cpp
+++ b/core/input/input_map.cpp
@@ -31,6 +31,7 @@
#include "input_map.h"
#include "core/config/project_settings.h"
+#include "core/input/input.h"
#include "core/os/keyboard.h"
InputMap *InputMap::singleton = nullptr;
@@ -50,7 +51,7 @@ void InputMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("action_erase_events", "action"), &InputMap::action_erase_events);
ClassDB::bind_method(D_METHOD("action_get_events", "action"), &InputMap::_action_get_events);
ClassDB::bind_method(D_METHOD("event_is_action", "event", "action"), &InputMap::event_is_action);
- ClassDB::bind_method(D_METHOD("load_from_globals"), &InputMap::load_from_globals);
+ ClassDB::bind_method(D_METHOD("load_from_project_settings"), &InputMap::load_from_project_settings);
}
void InputMap::add_action(const StringName &p_action, float p_deadzone) {
@@ -94,7 +95,7 @@ List<StringName> InputMap::get_actions() const {
return actions;
}
-List<Ref<InputEvent>>::Element *InputMap::_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength) const {
+List<Ref<InputEvent>>::Element *InputMap::_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float *p_raw_strength) const {
ERR_FAIL_COND_V(!p_event.is_valid(), nullptr);
for (List<Ref<InputEvent>>::Element *E = p_action.inputs.front(); E; E = E->next()) {
@@ -105,7 +106,7 @@ List<Ref<InputEvent>>::Element *InputMap::_find_event(Action &p_action, const Re
int device = e->get_device();
if (device == ALL_DEVICES || device == p_event->get_device()) {
- if (e->action_match(p_event, p_pressed, p_strength, p_action.deadzone)) {
+ if (e->action_match(p_event, p_pressed, p_strength, p_raw_strength, p_action.deadzone)) {
return E;
}
}
@@ -118,6 +119,12 @@ bool InputMap::has_action(const StringName &p_action) const {
return input_map.has(p_action);
}
+float InputMap::action_get_deadzone(const StringName &p_action) {
+ ERR_FAIL_COND_V_MSG(!input_map.has(p_action), 0.0f, "Request for nonexistent InputMap action '" + String(p_action) + "'.");
+
+ return input_map[p_action].deadzone;
+}
+
void InputMap::action_set_deadzone(const StringName &p_action, float p_deadzone) {
ERR_FAIL_COND_MSG(!input_map.has(p_action), "Request for nonexistent InputMap action '" + String(p_action) + "'.");
@@ -145,6 +152,9 @@ void InputMap::action_erase_event(const StringName &p_action, const Ref<InputEve
List<Ref<InputEvent>>::Element *E = _find_event(input_map[p_action], p_event);
if (E) {
input_map[p_action].inputs.erase(E);
+ if (Input::get_singleton()->is_action_pressed(p_action)) {
+ Input::get_singleton()->action_release(p_action);
+ }
}
}
@@ -179,7 +189,7 @@ bool InputMap::event_is_action(const Ref<InputEvent> &p_event, const StringName
return event_get_action_status(p_event, p_action);
}
-bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool *p_pressed, float *p_strength) const {
+bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool *p_pressed, float *p_strength, float *p_raw_strength) const {
Map<StringName, Action>::Element *E = input_map.find(p_action);
ERR_FAIL_COND_V_MSG(!E, false, "Request for nonexistent InputMap action '" + String(p_action) + "'.");
@@ -196,7 +206,8 @@ bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const Str
bool pressed;
float strength;
- List<Ref<InputEvent>>::Element *event = _find_event(E->get(), p_event, &pressed, &strength);
+ float raw_strength;
+ List<Ref<InputEvent>>::Element *event = _find_event(E->get(), p_event, &pressed, &strength, &raw_strength);
if (event != nullptr) {
if (p_pressed != nullptr) {
*p_pressed = pressed;
@@ -204,6 +215,9 @@ bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const Str
if (p_strength != nullptr) {
*p_strength = strength;
}
+ if (p_raw_strength != nullptr) {
+ *p_raw_strength = raw_strength;
+ }
return true;
} else {
return false;
@@ -214,7 +228,7 @@ const Map<StringName, InputMap::Action> &InputMap::get_action_map() const {
return input_map;
}
-void InputMap::load_from_globals() {
+void InputMap::load_from_project_settings() {
input_map.clear();
List<PropertyInfo> pinfo;
diff --git a/core/input/input_map.h b/core/input/input_map.h
index 35c65d0881..948d78ebdd 100644
--- a/core/input/input_map.h
+++ b/core/input/input_map.h
@@ -54,7 +54,7 @@ private:
mutable Map<StringName, Action> input_map;
- List<Ref<InputEvent>>::Element *_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool *p_pressed = nullptr, float *p_strength = nullptr) const;
+ List<Ref<InputEvent>>::Element *_find_event(Action &p_action, const Ref<InputEvent> &p_event, bool *p_pressed = nullptr, float *p_strength = nullptr, float *p_raw_strength = nullptr) const;
Array _action_get_events(const StringName &p_action);
Array _get_actions();
@@ -70,6 +70,7 @@ public:
void add_action(const StringName &p_action, float p_deadzone = 0.5);
void erase_action(const StringName &p_action);
+ float action_get_deadzone(const StringName &p_action);
void action_set_deadzone(const StringName &p_action, float p_deadzone);
void action_add_event(const StringName &p_action, const Ref<InputEvent> &p_event);
bool action_has_event(const StringName &p_action, const Ref<InputEvent> &p_event);
@@ -78,10 +79,10 @@ public:
const List<Ref<InputEvent>> *action_get_events(const StringName &p_action);
bool event_is_action(const Ref<InputEvent> &p_event, const StringName &p_action) const;
- bool event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool *p_pressed = nullptr, float *p_strength = nullptr) const;
+ bool event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool *p_pressed = nullptr, float *p_strength = nullptr, float *p_raw_strength = nullptr) const;
const Map<StringName, Action> &get_action_map() const;
- void load_from_globals();
+ void load_from_project_settings();
void load_default();
InputMap();
diff --git a/core/io/file_access_zip.cpp b/core/io/file_access_zip.cpp
index ce402fe8ed..1163c409bc 100644
--- a/core/io/file_access_zip.cpp
+++ b/core/io/file_access_zip.cpp
@@ -102,7 +102,6 @@ static voidpf godot_alloc(voidpf opaque, uInt items, uInt size) {
static void godot_free(voidpf opaque, voidpf address) {
memfree(address);
}
-
} // extern "C"
void ZipArchive::close_handle(unzFile p_file) const {
diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp
index a25413b21b..768fcdbb14 100644
--- a/core/io/http_client.cpp
+++ b/core/io/http_client.cpp
@@ -109,24 +109,41 @@ Ref<StreamPeer> HTTPClient::get_connection() const {
return connection;
}
+static bool _check_request_url(HTTPClient::Method p_method, const String &p_url) {
+ switch (p_method) {
+ case HTTPClient::METHOD_CONNECT: {
+ // Authority in host:port format, as in RFC7231
+ int pos = p_url.find_char(':');
+ return 0 < pos && pos < p_url.length() - 1;
+ }
+ case HTTPClient::METHOD_OPTIONS: {
+ if (p_url == "*") {
+ return true;
+ }
+ [[fallthrough]];
+ }
+ default:
+ // Absolute path or absolute URL
+ return p_url.begins_with("/") || p_url.begins_with("http://") || p_url.begins_with("https://");
+ }
+}
+
Error HTTPClient::request_raw(Method p_method, const String &p_url, const Vector<String> &p_headers, const Vector<uint8_t> &p_body) {
ERR_FAIL_INDEX_V(p_method, METHOD_MAX, ERR_INVALID_PARAMETER);
- ERR_FAIL_COND_V(!p_url.begins_with("/"), ERR_INVALID_PARAMETER);
+ ERR_FAIL_COND_V(!_check_request_url(p_method, p_url), ERR_INVALID_PARAMETER);
ERR_FAIL_COND_V(status != STATUS_CONNECTED, ERR_INVALID_PARAMETER);
ERR_FAIL_COND_V(connection.is_null(), ERR_INVALID_DATA);
String request = String(_methods[p_method]) + " " + p_url + " HTTP/1.1\r\n";
- if ((ssl && conn_port == PORT_HTTPS) || (!ssl && conn_port == PORT_HTTP)) {
- // Don't append the standard ports
- request += "Host: " + conn_host + "\r\n";
- } else {
- request += "Host: " + conn_host + ":" + itos(conn_port) + "\r\n";
- }
+ bool add_host = true;
bool add_clen = p_body.size() > 0;
bool add_uagent = true;
bool add_accept = true;
for (int i = 0; i < p_headers.size(); i++) {
request += p_headers[i] + "\r\n";
+ if (add_host && p_headers[i].findn("Host:") == 0) {
+ add_host = false;
+ }
if (add_clen && p_headers[i].findn("Content-Length:") == 0) {
add_clen = false;
}
@@ -137,6 +154,14 @@ Error HTTPClient::request_raw(Method p_method, const String &p_url, const Vector
add_accept = false;
}
}
+ if (add_host) {
+ if ((ssl && conn_port == PORT_HTTPS) || (!ssl && conn_port == PORT_HTTP)) {
+ // Don't append the standard ports
+ request += "Host: " + conn_host + "\r\n";
+ } else {
+ request += "Host: " + conn_host + ":" + itos(conn_port) + "\r\n";
+ }
+ }
if (add_clen) {
request += "Content-Length: " + itos(p_body.size()) + "\r\n";
// Should it add utf8 encoding?
@@ -178,22 +203,20 @@ Error HTTPClient::request_raw(Method p_method, const String &p_url, const Vector
Error HTTPClient::request(Method p_method, const String &p_url, const Vector<String> &p_headers, const String &p_body) {
ERR_FAIL_INDEX_V(p_method, METHOD_MAX, ERR_INVALID_PARAMETER);
- ERR_FAIL_COND_V(!p_url.begins_with("/"), ERR_INVALID_PARAMETER);
+ ERR_FAIL_COND_V(!_check_request_url(p_method, p_url), ERR_INVALID_PARAMETER);
ERR_FAIL_COND_V(status != STATUS_CONNECTED, ERR_INVALID_PARAMETER);
ERR_FAIL_COND_V(connection.is_null(), ERR_INVALID_DATA);
String request = String(_methods[p_method]) + " " + p_url + " HTTP/1.1\r\n";
- if ((ssl && conn_port == PORT_HTTPS) || (!ssl && conn_port == PORT_HTTP)) {
- // Don't append the standard ports
- request += "Host: " + conn_host + "\r\n";
- } else {
- request += "Host: " + conn_host + ":" + itos(conn_port) + "\r\n";
- }
+ bool add_host = true;
bool add_uagent = true;
bool add_accept = true;
bool add_clen = p_body.length() > 0;
for (int i = 0; i < p_headers.size(); i++) {
request += p_headers[i] + "\r\n";
+ if (add_host && p_headers[i].findn("Host:") == 0) {
+ add_host = false;
+ }
if (add_clen && p_headers[i].findn("Content-Length:") == 0) {
add_clen = false;
}
@@ -204,6 +227,14 @@ Error HTTPClient::request(Method p_method, const String &p_url, const Vector<Str
add_accept = false;
}
}
+ if (add_host) {
+ if ((ssl && conn_port == PORT_HTTPS) || (!ssl && conn_port == PORT_HTTP)) {
+ // Don't append the standard ports
+ request += "Host: " + conn_host + "\r\n";
+ } else {
+ request += "Host: " + conn_host + ":" + itos(conn_port) + "\r\n";
+ }
+ }
if (add_clen) {
request += "Content-Length: " + itos(p_body.utf8().length()) + "\r\n";
// Should it add utf8 encoding?
diff --git a/core/io/http_client.h b/core/io/http_client.h
index ece7e1924b..3d9fe321ba 100644
--- a/core/io/http_client.h
+++ b/core/io/http_client.h
@@ -41,7 +41,6 @@ class HTTPClient : public Reference {
public:
enum ResponseCode {
-
// 1xx informational
RESPONSE_CONTINUE = 100,
RESPONSE_SWITCHING_PROTOCOLS = 101,
@@ -116,7 +115,6 @@ public:
};
enum Method {
-
METHOD_GET,
METHOD_HEAD,
METHOD_POST,
@@ -131,7 +129,6 @@ public:
};
enum Status {
-
STATUS_DISCONNECTED,
STATUS_RESOLVING, // Resolving hostname (if passed a hostname)
STATUS_CANT_RESOLVE,
@@ -150,7 +147,6 @@ private:
static const int HOST_MIN_LEN = 4;
enum Port {
-
PORT_HTTP = 80,
PORT_HTTPS = 443,
diff --git a/core/io/image.cpp b/core/io/image.cpp
index 005fd481e8..f3c87a0f2d 100644
--- a/core/io/image.cpp
+++ b/core/io/image.cpp
@@ -80,7 +80,6 @@ const char *Image::format_names[Image::FORMAT_MAX] = {
"ETC2_RGB8A1",
"ETC2_RA_AS_RG",
"FORMAT_DXT5_RA_AS_RG",
-
};
SavePNGFunc Image::save_png_func = nullptr;
diff --git a/core/io/image.h b/core/io/image.h
index fecb90cab0..c5ec74f02f 100644
--- a/core/io/image.h
+++ b/core/io/image.h
@@ -66,7 +66,6 @@ public:
};
enum Format {
-
FORMAT_L8, //luminance
FORMAT_LA8, //luminance-alpha
FORMAT_R8,
@@ -111,7 +110,6 @@ public:
static const char *format_names[FORMAT_MAX];
enum Interpolation {
-
INTERPOLATE_NEAREST,
INTERPOLATE_BILINEAR,
INTERPOLATE_CUBIC,
diff --git a/core/io/ip.h b/core/io/ip.h
index d434d02f9b..32572b8eb2 100644
--- a/core/io/ip.h
+++ b/core/io/ip.h
@@ -42,7 +42,6 @@ class IP : public Object {
public:
enum ResolverStatus {
-
RESOLVER_STATUS_NONE,
RESOLVER_STATUS_WAITING,
RESOLVER_STATUS_DONE,
@@ -50,7 +49,6 @@ public:
};
enum Type {
-
TYPE_NONE = 0,
TYPE_IPV4 = 1,
TYPE_IPV6 = 2,
diff --git a/core/io/ip_address.cpp b/core/io/ip_address.cpp
index d0fb63b958..7d730e5ae8 100644
--- a/core/io/ip_address.cpp
+++ b/core/io/ip_address.cpp
@@ -31,7 +31,6 @@
#include "ip_address.h"
/*
IP_Address::operator Variant() const {
-
return operator String();
}*/
diff --git a/core/io/json.h b/core/io/json.h
index 2854d956ec..431b252e55 100644
--- a/core/io/json.h
+++ b/core/io/json.h
@@ -49,7 +49,6 @@ class JSON {
};
enum Expecting {
-
EXPECT_OBJECT,
EXPECT_OBJECT_KEY,
EXPECT_COLON,
diff --git a/core/io/multiplayer_api.h b/core/io/multiplayer_api.h
index e0ce1c8ca4..5b30c2e680 100644
--- a/core/io/multiplayer_api.h
+++ b/core/io/multiplayer_api.h
@@ -102,7 +102,6 @@ public:
};
enum RPCMode {
-
RPC_MODE_DISABLED, // No rpc for this method, calls to this will be blocked (default)
RPC_MODE_REMOTE, // Using rpc() on it will call method / set property in all remote peers
RPC_MODE_MASTER, // Using rpc() on it will call method on wherever the master is, be it local or remote
diff --git a/core/io/resource.cpp b/core/io/resource.cpp
index 5b249f7af3..58ab9a8cde 100644
--- a/core/io/resource.cpp
+++ b/core/io/resource.cpp
@@ -147,8 +147,8 @@ Ref<Resource> Resource::duplicate_for_local_scene(Node *p_for_scene, Map<Ref<Res
List<PropertyInfo> plist;
get_property_list(&plist);
- Resource *r = Object::cast_to<Resource>(ClassDB::instance(get_class()));
- ERR_FAIL_COND_V(!r, Ref<Resource>());
+ Ref<Resource> r = Object::cast_to<Resource>(ClassDB::instance(get_class()));
+ ERR_FAIL_COND_V(r.is_null(), Ref<Resource>());
r->local_scene = p_for_scene;
@@ -175,9 +175,7 @@ Ref<Resource> Resource::duplicate_for_local_scene(Node *p_for_scene, Map<Ref<Res
r->set(E->get().name, p);
}
- RES res = Ref<Resource>(r);
-
- return res;
+ return r;
}
void Resource::configure_for_local_scene(Node *p_for_scene, Map<Ref<Resource>, Ref<Resource>> &remap_cache) {
@@ -209,8 +207,8 @@ Ref<Resource> Resource::duplicate(bool p_subresources) const {
List<PropertyInfo> plist;
get_property_list(&plist);
- Resource *r = (Resource *)ClassDB::instance(get_class());
- ERR_FAIL_COND_V(!r, Ref<Resource>());
+ Ref<Resource> r = (Resource *)ClassDB::instance(get_class());
+ ERR_FAIL_COND_V(r.is_null(), Ref<Resource>());
for (List<PropertyInfo>::Element *E = plist.front(); E; E = E->next()) {
if (!(E->get().usage & PROPERTY_USAGE_STORAGE)) {
@@ -230,7 +228,7 @@ Ref<Resource> Resource::duplicate(bool p_subresources) const {
}
}
- return Ref<Resource>(r);
+ return r;
}
void Resource::_set_path(const String &p_path) {
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index c67e68e4fc..aeb859aabd 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -41,7 +41,6 @@
#define print_bl(m_what) (void)(m_what)
enum {
-
//numbering must be different from variant, in case new variant types are added (variant must be always contiguous for jumptable optimization)
VARIANT_NIL = 1,
VARIANT_BOOL = 2,
@@ -90,7 +89,6 @@ enum {
FORMAT_VERSION = 3,
FORMAT_VERSION_CAN_RENAME_DEPS = 1,
FORMAT_VERSION_NO_NODEPATH_PROPERTY = 3,
-
};
void ResourceLoaderBinary::_advance_padding(uint32_t p_len) {
diff --git a/core/io/resource_saver.h b/core/io/resource_saver.h
index 2e2950af53..c724c4a6e5 100644
--- a/core/io/resource_saver.h
+++ b/core/io/resource_saver.h
@@ -63,7 +63,6 @@ class ResourceSaver {
public:
enum SaverFlags {
-
FLAG_RELATIVE_PATHS = 1,
FLAG_BUNDLE_RESOURCES = 2,
FLAG_CHANGE_PATH = 4,
diff --git a/core/io/stream_peer_tcp.h b/core/io/stream_peer_tcp.h
index 45205866b4..173f92e2b6 100644
--- a/core/io/stream_peer_tcp.h
+++ b/core/io/stream_peer_tcp.h
@@ -42,7 +42,6 @@ class StreamPeerTCP : public StreamPeer {
public:
enum Status {
-
STATUS_NONE,
STATUS_CONNECTING,
STATUS_CONNECTED,
diff --git a/core/math/geometry_3d.cpp b/core/math/geometry_3d.cpp
index 56353de783..ccb6648561 100644
--- a/core/math/geometry_3d.cpp
+++ b/core/math/geometry_3d.cpp
@@ -241,7 +241,6 @@ Vector<Vector<Face3>> Geometry3D::separate_objects(Vector<Face3> p_array) {
/*** GEOMETRY WRAPPER ***/
enum _CellFlags {
-
_CELL_SOLID = 1,
_CELL_EXTERIOR = 2,
_CELL_STEP_MASK = 0x1C,
@@ -262,7 +261,6 @@ enum _CellFlags {
_CELL_PREV_Z_POS = 5 << 5,
_CELL_PREV_Z_NEG = 6 << 5,
_CELL_PREV_FIRST = 7 << 5,
-
};
static inline void _plot_face(uint8_t ***p_cell_status, int x, int y, int z, int len_x, int len_y, int len_z, const Vector3 &voxelsize, const Face3 &p_face) {
diff --git a/core/math/math_defs.h b/core/math/math_defs.h
index 4928c96abd..5192722839 100644
--- a/core/math/math_defs.h
+++ b/core/math/math_defs.h
@@ -66,27 +66,23 @@ enum ClockDirection {
};
enum Orientation {
-
HORIZONTAL,
VERTICAL
};
enum HAlign {
-
HALIGN_LEFT,
HALIGN_CENTER,
HALIGN_RIGHT
};
enum VAlign {
-
VALIGN_TOP,
VALIGN_CENTER,
VALIGN_BOTTOM
};
enum Margin {
-
MARGIN_LEFT,
MARGIN_TOP,
MARGIN_RIGHT,
@@ -94,7 +90,6 @@ enum Margin {
};
enum Corner {
-
CORNER_TOP_LEFT,
CORNER_TOP_RIGHT,
CORNER_BOTTOM_RIGHT,
diff --git a/core/math/math_fieldwise.cpp b/core/math/math_fieldwise.cpp
index ef2a0c5339..221c6812c1 100644
--- a/core/math/math_fieldwise.cpp
+++ b/core/math/math_fieldwise.cpp
@@ -47,9 +47,7 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
/* clang-format off */
switch (p_source.get_type()) {
-
case Variant::VECTOR2: {
-
SETUP_TYPE(Vector2)
/**/ TRY_TRANSFER_FIELD("x", x)
@@ -59,7 +57,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::RECT2: {
-
SETUP_TYPE(Rect2)
/**/ TRY_TRANSFER_FIELD("x", position.x)
@@ -71,7 +68,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::VECTOR3: {
-
SETUP_TYPE(Vector3)
/**/ TRY_TRANSFER_FIELD("x", x)
@@ -82,7 +78,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::PLANE: {
-
SETUP_TYPE(Plane)
/**/ TRY_TRANSFER_FIELD("x", normal.x)
@@ -94,7 +89,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::QUAT: {
-
SETUP_TYPE(Quat)
/**/ TRY_TRANSFER_FIELD("x", x)
@@ -106,7 +100,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::AABB: {
-
SETUP_TYPE(AABB)
/**/ TRY_TRANSFER_FIELD("px", position.x)
@@ -120,7 +113,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::TRANSFORM2D: {
-
SETUP_TYPE(Transform2D)
/**/ TRY_TRANSFER_FIELD("xx", elements[0][0])
@@ -134,7 +126,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::BASIS: {
-
SETUP_TYPE(Basis)
/**/ TRY_TRANSFER_FIELD("xx", elements[0][0])
@@ -151,7 +142,6 @@ Variant fieldwise_assign(const Variant &p_target, const Variant &p_source, const
}
case Variant::TRANSFORM: {
-
SETUP_TYPE(Transform)
/**/ TRY_TRANSFER_FIELD("xx", basis.elements[0][0])
diff --git a/core/math/octree.h b/core/math/octree.h
index 40201f99b1..be1e7d6a61 100644
--- a/core/math/octree.h
+++ b/core/math/octree.h
@@ -379,7 +379,6 @@ void Octree<T, use_pairs, AL>::_insert_element(Element *p_element, Octant *p_oct
if (p_octant->aabb.size.x / OCTREE_DIVISOR < element_size) {
//if (p_octant->aabb.size.x*0.5 < element_size) {
-
/* at smallest possible size for the element */
typename Element::OctantOwner owner;
owner.octant = p_octant;
diff --git a/core/object/callable_method_pointer.h b/core/object/callable_method_pointer.h
index ee6da6a8db..68990dcb72 100644
--- a/core/object/callable_method_pointer.h
+++ b/core/object/callable_method_pointer.h
@@ -114,7 +114,6 @@ Callable create_custom_callable_function_pointer(T *p_instance,
const char *p_func_text,
#endif
void (T::*p_method)(P...)) {
-
typedef CallableCustomMethodPointer<T, P...> CCMP; // Messes with memnew otherwise.
CCMP *ccmp = memnew(CCMP(p_instance, p_method));
#ifdef DEBUG_METHODS_ENABLED
@@ -170,7 +169,6 @@ Callable create_custom_callable_function_pointer(T *p_instance,
const char *p_func_text,
#endif
R (T::*p_method)(P...)) {
-
typedef CallableCustomMethodPointerRet<T, R, P...> CCMP; // Messes with memnew otherwise.
CCMP *ccmp = memnew(CCMP(p_instance, p_method));
#ifdef DEBUG_METHODS_ENABLED
@@ -226,7 +224,6 @@ Callable create_custom_callable_function_pointer(T *p_instance,
const char *p_func_text,
#endif
R (T::*p_method)(P...) const) {
-
typedef CallableCustomMethodPointerRetC<T, R, P...> CCMP; // Messes with memnew otherwise.
CCMP *ccmp = memnew(CCMP(p_instance, p_method));
#ifdef DEBUG_METHODS_ENABLED
diff --git a/core/object/method_bind.h b/core/object/method_bind.h
index ab4ba90b94..ddd6ab6baa 100644
--- a/core/object/method_bind.h
+++ b/core/object/method_bind.h
@@ -34,7 +34,6 @@
#include "core/variant/binder_common.h"
enum MethodFlags {
-
METHOD_FLAG_NORMAL = 1,
METHOD_FLAG_EDITOR = 2,
METHOD_FLAG_NOSCRIPT = 4,
diff --git a/core/object/object.cpp b/core/object/object.cpp
index c3f49856ca..96a41d6852 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -597,9 +597,6 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
_get_property_listv(p_list, p_reversed);
if (!is_class("Script")) { // can still be set, but this is for userfriendlyness
-#ifdef TOOLS_ENABLED
- p_list->push_back(PropertyInfo(Variant::NIL, "Script", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_GROUP));
-#endif
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT));
}
if (!metadata.empty()) {
diff --git a/core/object/object.h b/core/object/object.h
index c79745cf74..0bcfa42e3d 100644
--- a/core/object/object.h
+++ b/core/object/object.h
@@ -98,7 +98,6 @@ enum PropertyHint {
};
enum PropertyUsageFlags {
-
PROPERTY_USAGE_STORAGE = 1,
PROPERTY_USAGE_EDITOR = 2,
PROPERTY_USAGE_NETWORK = 4,
@@ -406,7 +405,6 @@ class ScriptInstance;
class Object {
public:
enum ConnectFlags {
-
CONNECT_DEFERRED = 1,
CONNECT_PERSIST = 2, // hint for scene to save this connection
CONNECT_ONESHOT = 4,
diff --git a/core/object/script_language.h b/core/object/script_language.h
index 447216f14f..3fd56c2f15 100644
--- a/core/object/script_language.h
+++ b/core/object/script_language.h
@@ -57,7 +57,6 @@ struct SortNetData {
class ScriptServer {
enum {
-
MAX_LANGUAGES = 16
};
diff --git a/core/os/file_access.h b/core/os/file_access.h
index 39b977a4d9..777c82bbd7 100644
--- a/core/os/file_access.h
+++ b/core/os/file_access.h
@@ -81,7 +81,6 @@ public:
virtual void _set_access_type(AccessType p_access);
enum ModeFlags {
-
READ = 1,
WRITE = 2,
READ_WRITE = 3,
diff --git a/core/os/keyboard.cpp b/core/os/keyboard.cpp
index d088151a6d..ef341987dc 100644
--- a/core/os/keyboard.cpp
+++ b/core/os/keyboard.cpp
@@ -38,7 +38,6 @@ struct _KeyCodeText {
};
static const _KeyCodeText _keycodes[] = {
-
/* clang-format off */
{KEY_ESCAPE ,"Escape"},
{KEY_TAB ,"Tab"},
diff --git a/core/os/keyboard.h b/core/os/keyboard.h
index 92664aff8f..67c60a2dbe 100644
--- a/core/os/keyboard.h
+++ b/core/os/keyboard.h
@@ -294,11 +294,9 @@ enum KeyList {
KEY_DIVISION = 0x00F7,
KEY_YDIAERESIS = 0x00FF,
-
};
enum KeyModifierMask {
-
KEY_CODE_MASK = ((1 << 25) - 1), ///< Apply this mask to any keycode to remove modifiers.
KEY_MODIFIER_MASK = (0xFF << 24), ///< Apply this mask to isolate modifiers.
KEY_MASK_SHIFT = (1 << 25),
@@ -314,7 +312,6 @@ enum KeyModifierMask {
KEY_MASK_KPAD = (1 << 29),
KEY_MASK_GROUP_SWITCH = (1 << 30)
// bit 31 can't be used because variant uses regular 32 bits int as datatype
-
};
String keycode_get_string(uint32_t p_code);
diff --git a/core/os/os.h b/core/os/os.h
index a1e75b5ee9..40104b479b 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -77,7 +77,6 @@ public:
typedef bool (*HasServerFeatureCallback)(const String &p_feature);
enum RenderThreadMode {
-
RENDER_THREAD_UNSAFE,
RENDER_THREAD_SAFE,
RENDER_SEPARATE_THREAD
diff --git a/core/os/pool_allocator.h b/core/os/pool_allocator.h
index 7d77af6266..c67b4d7fa2 100644
--- a/core/os/pool_allocator.h
+++ b/core/os/pool_allocator.h
@@ -43,7 +43,6 @@
*/
enum {
-
POOL_ALLOCATOR_INVALID_ID = -1 ///< default invalid value. use INVALID_ID( id ) to test
};
diff --git a/core/os/thread.h b/core/os/thread.h
index d68476e683..b87ec84313 100644
--- a/core/os/thread.h
+++ b/core/os/thread.h
@@ -39,7 +39,6 @@ typedef void (*ThreadCreateCallback)(void *p_userdata);
class Thread {
public:
enum Priority {
-
PRIORITY_LOW,
PRIORITY_NORMAL,
PRIORITY_HIGH
diff --git a/core/string/string_name.h b/core/string/string_name.h
index e6b46506c3..320f63bf68 100644
--- a/core/string/string_name.h
+++ b/core/string/string_name.h
@@ -44,7 +44,6 @@ struct StaticCString {
class StringName {
enum {
-
STRING_TABLE_BITS = 12,
STRING_TABLE_LEN = 1 << STRING_TABLE_BITS,
STRING_TABLE_MASK = STRING_TABLE_LEN - 1
diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp
index b5758bddf3..213578485e 100644
--- a/core/string/ustring.cpp
+++ b/core/string/ustring.cpp
@@ -3864,7 +3864,6 @@ String String::xml_escape(bool p_escape_quotes) const {
}
/*
for (int i=1;i<32;i++) {
-
char chr[2]={i,0};
str=str.replace(chr,"&#"+String::num(i)+";");
}*/
diff --git a/core/string/ustring.h b/core/string/ustring.h
index b46733ab66..bfae16fe64 100644
--- a/core/string/ustring.h
+++ b/core/string/ustring.h
@@ -198,7 +198,6 @@ class String {
public:
enum {
-
npos = -1 ///<for "some" compatibility with std::string (npos is a huge value in std::string)
};
diff --git a/core/templates/sort_array.h b/core/templates/sort_array.h
index a4326ac565..ece5e72e51 100644
--- a/core/templates/sort_array.h
+++ b/core/templates/sort_array.h
@@ -54,7 +54,6 @@ struct _DefaultComparator {
template <class T, class Comparator = _DefaultComparator<T>, bool Validate = SORT_ARRAY_VALIDATE_ENABLED>
class SortArray {
enum {
-
INTROSORT_THRESHOLD = 16
};
diff --git a/core/variant/variant.h b/core/variant/variant.h
index 1a684eeea0..093daf0c6f 100644
--- a/core/variant/variant.h
+++ b/core/variant/variant.h
@@ -426,7 +426,6 @@ public:
// If this changes the table in variant_op must be updated
enum Operator {
-
//comparison
OP_EQUAL,
OP_NOT_EQUAL,
diff --git a/core/variant/variant_call.cpp b/core/variant/variant_call.cpp
index 4cb8457ccd..f6fe642493 100644
--- a/core/variant/variant_call.cpp
+++ b/core/variant/variant_call.cpp
@@ -123,6 +123,31 @@ static _FORCE_INLINE_ void vc_ptrcall(void (T::*method)(P...) const, void *p_bas
}
template <class R, class T, class... P>
+static _FORCE_INLINE_ void vc_change_return_type(R (T::*method)(P...), Variant *v) {
+ TypeAdjust<R>::adjust(v);
+}
+
+template <class R, class T, class... P>
+static _FORCE_INLINE_ void vc_change_return_type(R (T::*method)(P...) const, Variant *v) {
+ TypeAdjust<R>::adjust(v);
+}
+
+template <class T, class... P>
+static _FORCE_INLINE_ void vc_change_return_type(void (T::*method)(P...), Variant *v) {
+ VariantInternal::clear(v);
+}
+
+template <class T, class... P>
+static _FORCE_INLINE_ void vc_change_return_type(void (T::*method)(P...) const, Variant *v) {
+ VariantInternal::clear(v);
+}
+
+template <class R, class... P>
+static _FORCE_INLINE_ void vc_change_return_type(R (*method)(P...), Variant *v) {
+ TypeAdjust<R>::adjust(v);
+}
+
+template <class R, class T, class... P>
static _FORCE_INLINE_ int vc_get_argument_count(R (T::*method)(P...)) {
return sizeof...(P);
}
@@ -258,7 +283,7 @@ static _FORCE_INLINE_ Variant::Type vc_get_base_type(void (T::*method)(P...) con
vc_method_call(m_method_ptr, base, p_args, p_argcount, r_ret, p_defvals, r_error); \
} \
static void validated_call(Variant *base, const Variant **p_args, int p_argcount, Variant *r_ret) { \
- TypeAdjust<m_class>::adjust(r_ret); \
+ vc_change_return_type(m_method_ptr, r_ret); \
vc_validated_call(m_method_ptr, base, p_args, r_ret); \
} \
static void ptrcall(void *p_base, const void **p_args, void *r_ret, int p_argcount) { \
@@ -301,7 +326,7 @@ static _FORCE_INLINE_ void vc_ptrcall(R (*method)(T *, P...), void *p_base, cons
call_with_variant_args_retc_static_helper_dv(VariantGetInternalPtr<m_class>::get_ptr(base), m_method_ptr, p_args, p_argcount, r_ret, p_defvals, r_error); \
} \
static void validated_call(Variant *base, const Variant **p_args, int p_argcount, Variant *r_ret) { \
- TypeAdjust<m_class>::adjust(r_ret); \
+ vc_change_return_type(m_method_ptr, r_ret); \
call_with_validated_variant_args_static_retc(base, m_method_ptr, p_args, r_ret); \
} \
static void ptrcall(void *p_base, const void **p_args, void *r_ret, int p_argcount) { \
@@ -607,7 +632,6 @@ void Variant::call(const StringName &p_method, const Variant **p_args, int p_arg
r_ret = _get_obj().obj->call(p_method, p_args, p_argcount, r_error);
//else if (type==Variant::METHOD) {
-
} else {
r_error.error = Callable::CallError::CALL_OK;
diff --git a/core/variant/variant_op.cpp b/core/variant/variant_op.cpp
index 8e55c1d6cd..74ecbfb8d1 100644
--- a/core/variant/variant_op.cpp
+++ b/core/variant/variant_op.cpp
@@ -2159,7 +2159,6 @@ static const char *_op_names[Variant::OP_MAX] = {
"xor",
"not",
"in"
-
};
String Variant::get_operator_name(Operator p_op) {
diff --git a/core/variant/variant_parser.h b/core/variant/variant_parser.h
index 59d18a8b9f..cf1941a40e 100644
--- a/core/variant/variant_parser.h
+++ b/core/variant/variant_parser.h
@@ -100,7 +100,6 @@ public:
};
enum Expecting {
-
EXPECT_OBJECT,
EXPECT_OBJECT_KEY,
EXPECT_COLON,
diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp
index 91a1b0262c..70edcd48c2 100644
--- a/core/variant/variant_utility.cpp
+++ b/core/variant/variant_utility.cpp
@@ -40,12 +40,15 @@
struct VariantUtilityFunctions {
// Math
+
static inline double sin(double arg) {
return Math::sin(arg);
}
+
static inline double cos(double arg) {
return Math::cos(arg);
}
+
static inline double tan(double arg) {
return Math::tan(arg);
}
@@ -53,9 +56,11 @@ struct VariantUtilityFunctions {
static inline double sinh(double arg) {
return Math::sinh(arg);
}
+
static inline double cosh(double arg) {
return Math::cosh(arg);
}
+
static inline double tanh(double arg) {
return Math::tanh(arg);
}
@@ -63,9 +68,11 @@ struct VariantUtilityFunctions {
static inline double asin(double arg) {
return Math::asin(arg);
}
+
static inline double acos(double arg) {
return Math::acos(arg);
}
+
static inline double atan(double arg) {
return Math::atan(arg);
}
@@ -173,6 +180,7 @@ struct VariantUtilityFunctions {
static inline double pow(double x, double y) {
return Math::pow(x, y);
}
+
static inline double log(double x) {
return Math::log(x);
}
@@ -181,24 +189,24 @@ struct VariantUtilityFunctions {
return Math::exp(x);
}
- static inline double is_nan(double x) {
+ static inline bool is_nan(double x) {
return Math::is_nan(x);
}
- static inline double is_inf(double x) {
+ static inline bool is_inf(double x) {
return Math::is_inf(x);
}
- static inline double is_equal_approx(double x, double y) {
+ static inline bool is_equal_approx(double x, double y) {
return Math::is_equal_approx(x, y);
}
- static inline double is_zero_approx(double x) {
+ static inline bool is_zero_approx(double x) {
return Math::is_zero_approx(x);
}
- static inline double ease(float x, float c) {
- return Math::ease(x, c);
+ static inline double ease(float x, float curve) {
+ return Math::ease(x, curve);
}
static inline int step_decimals(float step) {
@@ -268,6 +276,7 @@ struct VariantUtilityFunctions {
static inline int64_t wrapi(int64_t value, int64_t min, int64_t max) {
return Math::wrapi(value, min, max);
}
+
static inline double wrapf(double value, double min, double max) {
return Math::wrapf(value, min, max);
}
@@ -695,9 +704,9 @@ struct VariantUtilityFunctions {
return p_arr.hash();
}
- static inline Variant instance_from_id(int64_t p_id) {
+ static inline Object *instance_from_id(int64_t p_id) {
ObjectID id = ObjectID((uint64_t)p_id);
- Variant ret = ObjectDB::get_instance(id);
+ Object *ret = ObjectDB::get_instance(id);
return ret;
}
@@ -829,22 +838,18 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
static void call(Variant *r_ret, const Variant **p_args, int p_argcount, Callable::CallError &r_error) { \
call_helperr(VariantUtilityFunctions::m_func, r_ret, p_args, r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
validated_call_helperr(VariantUtilityFunctions::m_func, r_ret, p_args); \
} \
static void ptrcall(void *ret, const void **p_args, int p_argcount) { \
ptr_call_helperr(VariantUtilityFunctions::m_func, ret, p_args); \
} \
- \
static int get_argument_count() { \
return get_arg_count_helperr(VariantUtilityFunctions::m_func); \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return get_arg_type_helperr(VariantUtilityFunctions::m_func, p_arg); \
} \
- \
static Variant::Type get_return_type() { \
return get_ret_type_helperr(VariantUtilityFunctions::m_func); \
} \
@@ -863,7 +868,6 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
r_error.error = Callable::CallError::CALL_OK; \
*r_ret = VariantUtilityFunctions::m_func(*p_args[0], r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
Callable::CallError ce; \
*r_ret = VariantUtilityFunctions::m_func(*p_args[0], ce); \
@@ -872,15 +876,12 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
Callable::CallError ce; \
PtrToArg<Variant>::encode(VariantUtilityFunctions::m_func(PtrToArg<Variant>::convert(p_args[0]), ce), ret); \
} \
- \
static int get_argument_count() { \
return 1; \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return Variant::NIL; \
} \
- \
static Variant::Type get_return_type() { \
return Variant::NIL; \
} \
@@ -899,7 +900,6 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
r_error.error = Callable::CallError::CALL_OK; \
*r_ret = VariantUtilityFunctions::m_func(*p_args[0], *p_args[1], *p_args[2], r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
Callable::CallError ce; \
*r_ret = VariantUtilityFunctions::m_func(*p_args[0], *p_args[1], *p_args[2], ce); \
@@ -910,15 +910,12 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
r = VariantUtilityFunctions::m_func(PtrToArg<Variant>::convert(p_args[0]), PtrToArg<Variant>::convert(p_args[1]), PtrToArg<Variant>::convert(p_args[2]), ce); \
PtrToArg<Variant>::encode(r, ret); \
} \
- \
static int get_argument_count() { \
return 3; \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return Variant::NIL; \
} \
- \
static Variant::Type get_return_type() { \
return Variant::NIL; \
} \
@@ -937,7 +934,6 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
r_error.error = Callable::CallError::CALL_OK; \
*r_ret = VariantUtilityFunctions::m_func(p_args, p_argcount, r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
Callable::CallError c; \
*r_ret = VariantUtilityFunctions::m_func(p_args, p_argcount, c); \
@@ -955,15 +951,12 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
validated_call(&r, (const Variant **)argsp.ptr(), p_argcount); \
PtrToArg<Variant>::encode(r, ret); \
} \
- \
static int get_argument_count() { \
return 2; \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return Variant::NIL; \
} \
- \
static Variant::Type get_return_type() { \
return Variant::NIL; \
} \
@@ -986,7 +979,6 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
r_error.error = Callable::CallError::CALL_OK; \
*r_ret = VariantUtilityFunctions::m_func(p_args, p_argcount, r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
Callable::CallError c; \
*r_ret = VariantUtilityFunctions::m_func(p_args, p_argcount, c); \
@@ -1004,15 +996,12 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
validated_call(&r, (const Variant **)argsp.ptr(), p_argcount); \
PtrToArg<String>::encode(r.operator String(), ret); \
} \
- \
static int get_argument_count() { \
return 1; \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return Variant::NIL; \
} \
- \
static Variant::Type get_return_type() { \
return Variant::STRING; \
} \
@@ -1035,7 +1024,6 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
r_error.error = Callable::CallError::CALL_OK; \
VariantUtilityFunctions::m_func(p_args, p_argcount, r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
Callable::CallError c; \
VariantUtilityFunctions::m_func(p_args, p_argcount, c); \
@@ -1052,15 +1040,12 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
Variant r; \
validated_call(&r, (const Variant **)argsp.ptr(), p_argcount); \
} \
- \
static int get_argument_count() { \
return 1; \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return Variant::NIL; \
} \
- \
static Variant::Type get_return_type() { \
return Variant::NIL; \
} \
@@ -1082,22 +1067,18 @@ static _FORCE_INLINE_ Variant::Type get_ret_type_helper(void (*p_func)(P...)) {
static void call(Variant *r_ret, const Variant **p_args, int p_argcount, Callable::CallError &r_error) { \
call_helper(VariantUtilityFunctions::m_func, p_args, r_error); \
} \
- \
static void validated_call(Variant *r_ret, const Variant **p_args, int p_argcount) { \
validated_call_helper(VariantUtilityFunctions::m_func, p_args); \
} \
static void ptrcall(void *ret, const void **p_args, int p_argcount) { \
ptr_call_helper(VariantUtilityFunctions::m_func, p_args); \
} \
- \
static int get_argument_count() { \
return get_arg_count_helper(VariantUtilityFunctions::m_func); \
} \
- \
static Variant::Type get_argument_type(int p_arg) { \
return get_arg_type_helper(VariantUtilityFunctions::m_func, p_arg); \
} \
- \
static Variant::Type get_return_type() { \
return get_ret_type_helper(VariantUtilityFunctions::m_func); \
} \
@@ -1187,7 +1168,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(signf, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(signi, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
- FUNCBINDR(pow, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(pow, sarray("base", "exp"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(log, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(exp, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
@@ -1197,17 +1178,17 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(is_equal_approx, sarray("a", "b"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(is_zero_approx, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
- FUNCBINDR(ease, sarray("x", "c"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(ease, sarray("x", "curve"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(step_decimals, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(range_step_decimals, sarray("x"), Variant::UTILITY_FUNC_TYPE_MATH);
- FUNCBINDR(stepify, sarray("x", "y"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(stepify, sarray("x", "step"), Variant::UTILITY_FUNC_TYPE_MATH);
- FUNCBINDR(lerp, sarray("from", "to", "c"), Variant::UTILITY_FUNC_TYPE_MATH);
- FUNCBINDR(lerp_angle, sarray("from", "to", "c"), Variant::UTILITY_FUNC_TYPE_MATH);
- FUNCBINDR(inverse_lerp, sarray("from", "to", "c"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(lerp, sarray("from", "to", "weight"), 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);
- FUNCBINDR(smoothstep, sarray("from", "to", "c"), Variant::UTILITY_FUNC_TYPE_MATH);
+ FUNCBINDR(smoothstep, sarray("from", "to", "x"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(move_toward, sarray("from", "to", "delta"), Variant::UTILITY_FUNC_TYPE_MATH);
FUNCBINDR(dectime, sarray("value", "amount", "step"), Variant::UTILITY_FUNC_TYPE_MATH);
@@ -1238,7 +1219,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(nearest_po2, sarray("value"), Variant::UTILITY_FUNC_TYPE_MATH);
- //Random
+ // Random
FUNCBIND(randomize, sarray(), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(randi, sarray(), Variant::UTILITY_FUNC_TYPE_RANDOM);
@@ -1249,7 +1230,8 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(rand_from_seed, sarray("seed"), Variant::UTILITY_FUNC_TYPE_RANDOM);
// Utility
- FUNCBINDVR(weakref, sarray("from"), Variant::UTILITY_FUNC_TYPE_GENERAL);
+
+ FUNCBINDVR(weakref, sarray("obj"), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDR(_typeof, sarray("variable"), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGS(str, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDVARARGV(print, sarray(), Variant::UTILITY_FUNC_TYPE_GENERAL);
@@ -1271,10 +1253,11 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(hash, sarray("variable"), Variant::UTILITY_FUNC_TYPE_GENERAL);
- FUNCBINDR(instance_from_id, sarray("id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
+ FUNCBINDR(instance_from_id, sarray("instance_id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDR(is_instance_id_valid, sarray("id"), Variant::UTILITY_FUNC_TYPE_GENERAL);
FUNCBINDR(is_instance_valid, sarray("instance"), Variant::UTILITY_FUNC_TYPE_GENERAL);
}
+
void Variant::_unregister_variant_utility_functions() {
utility_function_table.clear();
utility_function_name_table.clear();
@@ -1318,6 +1301,7 @@ Variant::ValidatedUtilityFunction Variant::get_validated_utility_function(const
return bfi->validated_call_utility;
}
+
Variant::PTRUtilityFunction Variant::get_ptr_utility_function(const StringName &p_name) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
if (!bfi) {
@@ -1344,6 +1328,7 @@ int Variant::get_utility_function_argument_count(const StringName &p_name) {
return bfi->argcount;
}
+
Variant::Type Variant::get_utility_function_argument_type(const StringName &p_name, int p_arg) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
if (!bfi) {
@@ -1352,6 +1337,7 @@ Variant::Type Variant::get_utility_function_argument_type(const StringName &p_na
return bfi->get_arg_type(p_arg);
}
+
String Variant::get_utility_function_argument_name(const StringName &p_name, int p_arg) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
if (!bfi) {
@@ -1361,6 +1347,7 @@ String Variant::get_utility_function_argument_name(const StringName &p_name, int
ERR_FAIL_INDEX_V(p_arg, bfi->argnames.size(), String());
return bfi->argnames[p_arg];
}
+
bool Variant::has_utility_function_return_value(const StringName &p_name) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
if (!bfi) {
@@ -1368,6 +1355,7 @@ bool Variant::has_utility_function_return_value(const StringName &p_name) {
}
return bfi->returns_value;
}
+
Variant::Type Variant::get_utility_function_return_type(const StringName &p_name) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
if (!bfi) {
@@ -1376,6 +1364,7 @@ Variant::Type Variant::get_utility_function_return_type(const StringName &p_name
return bfi->return_type;
}
+
bool Variant::is_utility_function_vararg(const StringName &p_name) {
const VariantUtilityFunctionInfo *bfi = utility_function_table.lookup_ptr(p_name);
if (!bfi) {
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index ee65bbc07e..f6b8e0da19 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -10,6 +10,1147 @@
<tutorials>
</tutorials>
<methods>
+ <method name="abs">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="x" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="absf">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the absolute value of float parameter [code]x[/code] (i.e. positive value).
+ [codeblock]
+ # a is 1.2
+ a = absf(-1.2)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="absi">
+ <return type="int">
+ </return>
+ <argument index="0" name="x" type="int">
+ </argument>
+ <description>
+ Returns the absolute value of int parameter [code]x[/code] (i.e. positive value).
+ [codeblock]
+ # a is 1
+ a = absi(-1)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="acos">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the arc cosine of [code]x[/code] in radians. Use to get the angle of cosine [code]x[/code].
+ [codeblock]
+ # c is 0.523599 or 30 degrees if converted with rad2deg(c)
+ c = acos(0.866025)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="asin">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the arc sine of [code]x[/code] in radians. Use to get the angle of sine [code]x[/code].
+ [codeblock]
+ # s is 0.523599 or 30 degrees if converted with rad2deg(s)
+ s = asin(0.5)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="atan">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the arc tangent of [code]x[/code] in radians. Use it to get the angle from an angle's tangent in trigonometry: [code]atan(tan(angle)) == angle[/code].
+ The method cannot know in which quadrant the angle should fall. See [method atan2] if you have both [code]y[/code] and [code]x[/code].
+ [codeblock]
+ a = atan(0.5) # a is 0.463648
+ [/codeblock]
+ </description>
+ </method>
+ <method name="atan2">
+ <return type="float">
+ </return>
+ <argument index="0" name="y" type="float">
+ </argument>
+ <argument index="1" name="x" type="float">
+ </argument>
+ <description>
+ Returns the arc tangent of [code]y/x[/code] in radians. Use to get the angle of tangent [code]y/x[/code]. To compute the value, the method takes into account the sign of both arguments in order to determine the quadrant.
+ Important note: The Y coordinate comes first, by convention.
+ [codeblock]
+ a = atan2(0, -1) # a is 3.141593
+ [/codeblock]
+ </description>
+ </method>
+ <method name="bytes2var">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="bytes" type="PackedByteArray">
+ </argument>
+ <description>
+ Decodes a byte array back to a [Variant] value, without decoding objects.
+ [b]Note:[/b] If you need object deserialization, see [method bytes2var_with_objects].
+ </description>
+ </method>
+ <method name="bytes2var_with_objects">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="bytes" type="PackedByteArray">
+ </argument>
+ <description>
+ Decodes a byte array back to a [Variant] value. Decoding objects is allowed.
+ [b]WARNING:[/b] Deserialized object can contain code which gets executed. Do not use this option if the serialized object comes from untrusted sources to avoid potential security threats (remote code execution).
+ </description>
+ </method>
+ <method name="cartesian2polar">
+ <return type="Vector2">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <argument index="1" name="y" type="float">
+ </argument>
+ <description>
+ Converts a 2D point expressed in the cartesian coordinate system (X and Y axis) to the polar coordinate system (a distance from the origin and an angle).
+ </description>
+ </method>
+ <method name="ceil">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Rounds [code]x[/code] upward (towards positive infinity), returning the smallest whole number that is not less than [code]x[/code].
+ [codeblock]
+ i = ceil(1.45) # i is 2
+ i = ceil(1.001) # i is 2
+ [/codeblock]
+ See also [method floor], [method round], and [method stepify].
+ </description>
+ </method>
+ <method name="clamp">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="value" type="Variant">
+ </argument>
+ <argument index="1" name="min" type="Variant">
+ </argument>
+ <argument index="2" name="max" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="clampf">
+ <return type="float">
+ </return>
+ <argument index="0" name="value" type="float">
+ </argument>
+ <argument index="1" name="min" type="float">
+ </argument>
+ <argument index="2" name="max" type="float">
+ </argument>
+ <description>
+ Clamps the float [code]value[/code] and returns a value not less than [code]min[/code] and not more than [code]max[/code].
+ [codeblock]
+ speed = 42.1
+ # a is 20.0
+ a = clampf(speed, 1.0, 20.0)
+
+ speed = -10.0
+ # a is -1.0
+ a = clampf(speed, -1.0, 1.0)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="clampi">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="int">
+ </argument>
+ <argument index="1" name="min" type="int">
+ </argument>
+ <argument index="2" name="max" type="int">
+ </argument>
+ <description>
+ Clamps the integer [code]value[/code] and returns a value not less than [code]min[/code] and not more than [code]max[/code].
+ [codeblock]
+ speed = 42
+ # a is 20
+ a = clampi(speed, 1, 20)
+
+ speed = -10
+ # a is -1
+ a = clampi(speed, -1, 1)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="cos">
+ <return type="float">
+ </return>
+ <argument index="0" name="angle_rad" type="float">
+ </argument>
+ <description>
+ Returns the cosine of angle [code]angle_rad[/code] in radians.
+ [codeblock]
+ # Prints 1 then -1
+ print(cos(PI * 2))
+ print(cos(PI))
+ [/codeblock]
+ </description>
+ </method>
+ <method name="cosh">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the hyperbolic cosine of [code]x[/code] in radians.
+ [codeblock]
+ # Prints 1.543081
+ print(cosh(1))
+ [/codeblock]
+ </description>
+ </method>
+ <method name="db2linear">
+ <return type="float">
+ </return>
+ <argument index="0" name="db" type="float">
+ </argument>
+ <description>
+ Converts from decibels to linear energy (audio).
+ </description>
+ </method>
+ <method name="dectime">
+ <return type="float">
+ </return>
+ <argument index="0" name="value" type="float">
+ </argument>
+ <argument index="1" name="amount" type="float">
+ </argument>
+ <argument index="2" name="step" type="float">
+ </argument>
+ <description>
+ Returns the result of [code]value[/code] decreased by [code]step[/code] * [code]amount[/code].
+ [codeblock]
+ # a = 59
+ a = dectime(60, 10, 0.1))
+ [/codeblock]
+ </description>
+ </method>
+ <method name="deg2rad">
+ <return type="float">
+ </return>
+ <argument index="0" name="deg" type="float">
+ </argument>
+ <description>
+ Converts an angle expressed in degrees to radians.
+ [codeblock]
+ # r is 3.141593
+ r = deg2rad(180)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="ease">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <argument index="1" name="curve" type="float">
+ </argument>
+ <description>
+ Easing function, based on exponent. The curve values are: 0 is constant, 1 is linear, 0 to 1 is ease-in, 1+ is ease out. Negative values are in-out/out in.
+ </description>
+ </method>
+ <method name="exp">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ The natural exponential function. It raises the mathematical constant [b]e[/b] to the power of [code]x[/code] and returns it.
+ [b]e[/b] has an approximate value of 2.71828, and can be obtained with [code]exp(1)[/code].
+ For exponents to other bases use the method [method pow].
+ [codeblock]
+ a = exp(2) # Approximately 7.39
+ [/codeblock]
+ </description>
+ </method>
+ <method name="floor">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Rounds [code]x[/code] downward (towards negative infinity), returning the largest whole number that is not more than [code]x[/code].
+ [codeblock]
+ # a is 2.0
+ a = floor(2.99)
+ # a is -3.0
+ a = floor(-2.99)
+ [/codeblock]
+ See also [method ceil], [method round], and [method stepify].
+ [b]Note:[/b] This method returns a float. If you need an integer, you can use [code]int(x)[/code] directly.
+ </description>
+ </method>
+ <method name="fmod">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <argument index="1" name="y" type="float">
+ </argument>
+ <description>
+ Returns the floating-point remainder of [code]x/y[/code], keeping the sign of [code]x[/code].
+ [codeblock]
+ # Remainder is 1.5
+ var remainder = fmod(7, 5.5)
+ [/codeblock]
+ For the integer remainder operation, use the [code]%[/code] operator.
+ </description>
+ </method>
+ <method name="fposmod">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <argument index="1" name="y" type="float">
+ </argument>
+ <description>
+ Returns the floating-point modulus of [code]x/y[/code] that wraps equally in positive and negative.
+ [codeblock]
+ for i in 7:
+ var x = 0.5 * i - 1.5
+ print("%4.1f %4.1f %4.1f" % [x, fmod(x, 1.5), fposmod(x, 1.5)])
+ [/codeblock]
+ Produces:
+ [codeblock]
+ -1.5 -0.0 0.0
+ -1.0 -1.0 0.5
+ -0.5 -0.5 1.0
+ 0.0 0.0 0.0
+ 0.5 0.5 0.5
+ 1.0 1.0 1.0
+ 1.5 0.0 0.0
+ [/codeblock]
+ </description>
+ </method>
+ <method name="hash">
+ <return type="int">
+ </return>
+ <argument index="0" name="variable" type="Variant">
+ </argument>
+ <description>
+ Returns the integer hash of the variable passed.
+ [codeblock]
+ print(hash("a")) # Prints 177670
+ [/codeblock]
+ </description>
+ </method>
+ <method name="instance_from_id">
+ <return type="Object">
+ </return>
+ <argument index="0" name="instance_id" type="int">
+ </argument>
+ <description>
+ Returns the Object that corresponds to [code]instance_id[/code]. All Objects have a unique instance ID.
+ [codeblock]
+ var foo = "bar"
+ func _ready():
+ var id = get_instance_id()
+ var inst = instance_from_id(id)
+ print(inst.foo) # Prints bar
+ [/codeblock]
+ </description>
+ </method>
+ <method name="inverse_lerp">
+ <return type="float">
+ </return>
+ <argument index="0" name="from" type="float">
+ </argument>
+ <argument index="1" name="to" type="float">
+ </argument>
+ <argument index="2" name="weight" type="float">
+ </argument>
+ <description>
+ Returns a normalized value considering the given range. This is the opposite of [method lerp].
+ [codeblock]
+ var middle = lerp(20, 30, 0.75)
+ # `middle` is now 27.5.
+ # Now, we pretend to have forgotten the original ratio and want to get it back.
+ var ratio = inverse_lerp(20, 30, 27.5)
+ # `ratio` is now 0.75.
+ [/codeblock]
+ </description>
+ </method>
+ <method name="is_equal_approx">
+ <return type="bool">
+ </return>
+ <argument index="0" name="a" type="float">
+ </argument>
+ <argument index="1" name="b" type="float">
+ </argument>
+ <description>
+ Returns [code]true[/code] if [code]a[/code] and [code]b[/code] are approximately equal to each other.
+ Here, approximately equal means that [code]a[/code] and [code]b[/code] are within a small internal epsilon of each other, which scales with the magnitude of the numbers.
+ Infinity values of the same sign are considered equal.
+ </description>
+ </method>
+ <method name="is_inf">
+ <return type="bool">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns whether [code]x[/code] is an infinity value (either positive infinity or negative infinity).
+ </description>
+ </method>
+ <method name="is_instance_id_valid">
+ <return type="bool">
+ </return>
+ <argument index="0" name="id" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="is_instance_valid">
+ <return type="bool">
+ </return>
+ <argument index="0" name="instance" type="Variant">
+ </argument>
+ <description>
+ Returns whether [code]instance[/code] is a valid object (e.g. has not been deleted from memory).
+ </description>
+ </method>
+ <method name="is_nan">
+ <return type="bool">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns whether [code]x[/code] is a NaN ("Not a Number" or invalid) value.
+ </description>
+ </method>
+ <method name="is_zero_approx">
+ <return type="bool">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns [code]true[/code] if [code]x[/code] is zero or almost zero.
+ This method is faster than using [method is_equal_approx] with one value as zero.
+ </description>
+ </method>
+ <method name="lerp">
+ <return type="float">
+ </return>
+ <argument index="0" name="from" type="float">
+ </argument>
+ <argument index="1" name="to" type="float">
+ </argument>
+ <argument index="2" name="weight" type="float">
+ </argument>
+ <description>
+ Linearly interpolates between two values by a normalized value. This is the opposite of [method inverse_lerp].
+ [codeblock]
+ lerp(0, 4, 0.75) # Returns 3.0
+ [/codeblock]
+ </description>
+ </method>
+ <method name="lerp_angle">
+ <return type="float">
+ </return>
+ <argument index="0" name="from" type="float">
+ </argument>
+ <argument index="1" name="to" type="float">
+ </argument>
+ <argument index="2" name="weight" type="float">
+ </argument>
+ <description>
+ Linearly interpolates between two angles (in radians) by a normalized value.
+ Similar to [method lerp], but interpolates correctly when the angles wrap around [constant @GDScript.TAU].
+ [codeblock]
+ extends Sprite
+ var elapsed = 0.0
+ func _process(delta):
+ var min_angle = deg2rad(0.0)
+ var max_angle = deg2rad(90.0)
+ rotation = lerp_angle(min_angle, max_angle, elapsed)
+ elapsed += delta
+ [/codeblock]
+ </description>
+ </method>
+ <method name="linear2db">
+ <return type="float">
+ </return>
+ <argument index="0" name="lin" type="float">
+ </argument>
+ <description>
+ Converts from linear energy to decibels (audio). This can be used to implement volume sliders that behave as expected (since volume isn't linear). Example:
+ [codeblock]
+ # "Slider" refers to a node that inherits Range such as HSlider or VSlider.
+ # Its range must be configured to go from 0 to 1.
+ # Change the bus name if you'd like to change the volume of a specific bus only.
+ AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Master"), linear2db($Slider.value))
+ [/codeblock]
+ </description>
+ </method>
+ <method name="log">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Natural logarithm. The amount of time needed to reach a certain level of continuous growth.
+ [b]Note:[/b] This is not the same as the "log" function on most calculators, which uses a base 10 logarithm.
+ [codeblock]
+ log(10) # Returns 2.302585
+ [/codeblock]
+ [b]Note:[/b] The logarithm of [code]0[/code] returns [code]-inf[/code], while negative values return [code]-nan[/code].
+ </description>
+ </method>
+ <method name="max" qualifiers="vararg">
+ <return type="Variant">
+ </return>
+ <description>
+ Returns the maximum of the given values. This method can take any number of arguments.
+ [codeblock]
+ max(1, 7, 3, -6, 5) # Returns 7
+ [/codeblock]
+ </description>
+ </method>
+ <method name="maxf">
+ <return type="float">
+ </return>
+ <argument index="0" name="a" type="float">
+ </argument>
+ <argument index="1" name="b" type="float">
+ </argument>
+ <description>
+ Returns the maximum of two float values.
+ [codeblock]
+ maxf(3.6, 24) # Returns 24.0
+ maxf(-3.99, -4) # Returns -3.99
+ [/codeblock]
+ </description>
+ </method>
+ <method name="maxi">
+ <return type="int">
+ </return>
+ <argument index="0" name="a" type="int">
+ </argument>
+ <argument index="1" name="b" type="int">
+ </argument>
+ <description>
+ Returns the maximum of two int values.
+ [codeblock]
+ maxi(1, 2) # Returns 2
+ maxi(-3, -4) # Returns -3
+ [/codeblock]
+ </description>
+ </method>
+ <method name="min" qualifiers="vararg">
+ <return type="Variant">
+ </return>
+ <description>
+ Returns the minimum of the given values. This method can take any number of arguments.
+ [codeblock]
+ min(1, 7, 3, -6, 5) # Returns -6
+ [/codeblock]
+ </description>
+ </method>
+ <method name="minf">
+ <return type="float">
+ </return>
+ <argument index="0" name="a" type="float">
+ </argument>
+ <argument index="1" name="b" type="float">
+ </argument>
+ <description>
+ Returns the minimum of two float values.
+ [codeblock]
+ minf(3.6, 24) # Returns 3.6
+ minf(-3.99, -4) # Returns -4.0
+ [/codeblock]
+ </description>
+ </method>
+ <method name="mini">
+ <return type="int">
+ </return>
+ <argument index="0" name="a" type="int">
+ </argument>
+ <argument index="1" name="b" type="int">
+ </argument>
+ <description>
+ Returns the minimum of two int values.
+ [codeblock]
+ mini(1, 2) # Returns 1
+ mini(-3, -4) # Returns -4
+ [/codeblock]
+ </description>
+ </method>
+ <method name="move_toward">
+ <return type="float">
+ </return>
+ <argument index="0" name="from" type="float">
+ </argument>
+ <argument index="1" name="to" type="float">
+ </argument>
+ <argument index="2" name="delta" type="float">
+ </argument>
+ <description>
+ Moves [code]from[/code] toward [code]to[/code] by the [code]delta[/code] value.
+ Use a negative [code]delta[/code] value to move away.
+ [codeblock]
+ move_toward(5, 10, 4) # Returns 9
+ move_toward(10, 5, 4) # Returns 6
+ move_toward(10, 5, -1.5) # Returns 11.5
+ [/codeblock]
+ </description>
+ </method>
+ <method name="nearest_po2">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="int">
+ </argument>
+ <description>
+ Returns the nearest equal or larger power of 2 for integer [code]value[/code].
+ In other words, returns the smallest value [code]a[/code] where [code]a = pow(2, n)[/code] such that [code]value &lt;= a[/code] for some non-negative integer [code]n[/code].
+ [codeblock]
+ nearest_po2(3) # Returns 4
+ nearest_po2(4) # Returns 4
+ nearest_po2(5) # Returns 8
+
+ nearest_po2(0) # Returns 0 (this may not be what you expect)
+ nearest_po2(-1) # Returns 0 (this may not be what you expect)
+ [/codeblock]
+ [b]WARNING:[/b] Due to the way it is implemented, this function returns [code]0[/code] rather than [code]1[/code] for non-positive values of [code]value[/code] (in reality, 1 is the smallest integer power of 2).
+ </description>
+ </method>
+ <method name="polar2cartesian">
+ <return type="Vector2">
+ </return>
+ <argument index="0" name="r" type="float">
+ </argument>
+ <argument index="1" name="th" type="float">
+ </argument>
+ <description>
+ Converts a 2D point expressed in the polar coordinate system (a distance from the origin [code]r[/code] and an angle [code]th[/code]) to the cartesian coordinate system (X and Y axis).
+ </description>
+ </method>
+ <method name="pow">
+ <return type="float">
+ </return>
+ <argument index="0" name="base" type="float">
+ </argument>
+ <argument index="1" name="exp" type="float">
+ </argument>
+ <description>
+ Returns the result of [code]base[/code] raised to the power of [code]exp[/code].
+ [codeblock]
+ pow(2, 5) # Returns 32
+ [/codeblock]
+ </description>
+ </method>
+ <method name="print" qualifiers="vararg">
+ <description>
+ Converts one or more arguments to strings in the best way possible and prints them to the console.
+ [codeblock]
+ a = [1, 2, 3]
+ print("a", "b", a) # Prints ab[1, 2, 3]
+ [/codeblock]
+ [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="printerr" qualifiers="vararg">
+ <description>
+ Prints one or more arguments to strings in the best way possible to standard error line.
+ [codeblock]
+ printerr("prints to stderr")
+ [/codeblock]
+ </description>
+ </method>
+ <method name="printraw" qualifiers="vararg">
+ <description>
+ Prints one or more arguments to strings in the best way possible to console. No newline is added at the end.
+ [codeblock]
+ printraw("A")
+ printraw("B")
+ # Prints AB
+ [/codeblock]
+ [b]Note:[/b] Due to limitations with Godot's built-in console, this only prints to the terminal. If you need to print in the editor, use another method, such as [method print].
+ </description>
+ </method>
+ <method name="prints" qualifiers="vararg">
+ <description>
+ Prints one or more arguments to the console with a space between each argument.
+ [codeblock]
+ prints("A", "B", "C") # Prints A B C
+ [/codeblock]
+ </description>
+ </method>
+ <method name="printt" qualifiers="vararg">
+ <description>
+ Prints one or more arguments to the console with a tab between each argument.
+ [codeblock]
+ printt("A", "B", "C") # Prints A B C
+ [/codeblock]
+ </description>
+ </method>
+ <method name="push_error" qualifiers="vararg">
+ <description>
+ Pushes an error message to Godot's built-in debugger and to the OS terminal.
+ [codeblock]
+ push_error("test error") # Prints "test error" to debugger and terminal as error call
+ [/codeblock]
+ [b]Note:[/b] Errors printed this way will not pause project execution. To print an error message and pause project execution in debug builds, use [code]assert(false, "test error")[/code] instead.
+ </description>
+ </method>
+ <method name="push_warning" qualifiers="vararg">
+ <description>
+ Pushes a warning message to Godot's built-in debugger and to the OS terminal.
+ [codeblock]
+ push_warning("test warning") # Prints "test warning" to debugger and terminal as warning call
+ [/codeblock]
+ </description>
+ </method>
+ <method name="rad2deg">
+ <return type="float">
+ </return>
+ <argument index="0" name="rad" type="float">
+ </argument>
+ <description>
+ Converts an angle expressed in radians to degrees.
+ [codeblock]
+ rad2deg(0.523599) # Returns 30
+ [/codeblock]
+ </description>
+ </method>
+ <method name="rand_from_seed">
+ <return type="PackedInt64Array">
+ </return>
+ <argument index="0" name="seed" type="int">
+ </argument>
+ <description>
+ Random from seed: pass a [code]seed[/code], and an array with both number and new seed is returned. "Seed" here refers to the internal state of the pseudo random number generator. The internal state of the current implementation is 64 bits.
+ </description>
+ </method>
+ <method name="randf">
+ <return type="float">
+ </return>
+ <description>
+ Returns a random floating point value on the interval [code][0, 1][/code].
+ [codeblock]
+ randf() # Returns e.g. 0.375671
+ [/codeblock]
+ </description>
+ </method>
+ <method name="randf_range">
+ <return type="float">
+ </return>
+ <argument index="0" name="from" type="float">
+ </argument>
+ <argument index="1" name="to" type="float">
+ </argument>
+ <description>
+ Random range, any floating point value between [code]from[/code] and [code]to[/code].
+ [codeblock]
+ prints(randf_range(-10, 10), randf_range(-10, 10)) # Prints e.g. -3.844535 7.45315
+ [/codeblock]
+ </description>
+ </method>
+ <method name="randi">
+ <return type="int">
+ </return>
+ <description>
+ Returns a random unsigned 32 bit integer. Use remainder to obtain a random value in the interval [code][0, N - 1][/code] (where N is smaller than 2^32).
+ [codeblock]
+ randi() # Returns random integer between 0 and 2^32 - 1
+ randi() % 20 # Returns random integer between 0 and 19
+ randi() % 100 # Returns random integer between 0 and 99
+ randi() % 100 + 1 # Returns random integer between 1 and 100
+ [/codeblock]
+ </description>
+ </method>
+ <method name="randi_range">
+ <return type="int">
+ </return>
+ <argument index="0" name="from" type="int">
+ </argument>
+ <argument index="1" name="to" type="int">
+ </argument>
+ <description>
+ Random range, any 32-bit integer value between [code]from[/code] and [code]to[/code] (inclusive). If [code]to[/code] is lesser than [code]from[/code] they are swapped.
+ [codeblock]
+ print(randi_range(0, 1)) # Prints 0 or 1
+ print(randi_range(-10, 1000)) # Prints any number from -10 to 1000
+ [/codeblock]
+ </description>
+ </method>
+ <method name="randomize">
+ <description>
+ Randomizes the seed (or the internal state) of the random number generator. Current implementation reseeds using a number based on time.
+ [codeblock]
+ func _ready():
+ randomize()
+ [/codeblock]
+ </description>
+ </method>
+ <method name="range_lerp">
+ <return type="float">
+ </return>
+ <argument index="0" name="value" type="float">
+ </argument>
+ <argument index="1" name="istart" type="float">
+ </argument>
+ <argument index="2" name="istop" type="float">
+ </argument>
+ <argument index="3" name="ostart" type="float">
+ </argument>
+ <argument index="4" name="ostop" type="float">
+ </argument>
+ <description>
+ Maps a [code]value[/code] from range [code][istart, istop][/code] to [code][ostart, ostop][/code].
+ [codeblock]
+ range_lerp(75, 0, 100, -1, 1) # Returns 0.5
+ [/codeblock]
+ </description>
+ </method>
+ <method name="range_step_decimals">
+ <return type="int">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="round">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Rounds [code]x[/code] to the nearest whole number, with halfway cases rounded away from zero.
+ [codeblock]
+ round(2.6) # Returns 3
+ [/codeblock]
+ See also [method floor], [method ceil], and [method stepify].
+ </description>
+ </method>
+ <method name="seed">
+ <argument index="0" name="base" type="int">
+ </argument>
+ <description>
+ Sets seed for the random number generator.
+ [codeblock]
+ my_seed = "Godot Rocks"
+ seed(my_seed.hash())
+ [/codeblock]
+ </description>
+ </method>
+ <method name="sign">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="x" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="signf">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the sign of [code]x[/code] as a float: -1.0 or 1.0. Returns 0.0 if [code]x[/code] is 0.
+ [codeblock]
+ sign(-6.0) # Returns -1.0
+ sign(0.0) # Returns 0.0
+ sign(6.0) # Returns 1.0
+ [/codeblock]
+ </description>
+ </method>
+ <method name="signi">
+ <return type="int">
+ </return>
+ <argument index="0" name="x" type="int">
+ </argument>
+ <description>
+ Returns the sign of [code]x[/code] as an integer: -1 or 1. Returns 0 if [code]x[/code] is 0.
+ [codeblock]
+ sign(-6) # Returns -1
+ sign(0) # Returns 0
+ sign(6) # Returns 1
+ [/codeblock]
+ </description>
+ </method>
+ <method name="sin">
+ <return type="float">
+ </return>
+ <argument index="0" name="angle_rad" type="float">
+ </argument>
+ <description>
+ Returns the sine of angle [code]angle_rad[/code] in radians.
+ [codeblock]
+ sin(0.523599) # Returns 0.5
+ [/codeblock]
+ </description>
+ </method>
+ <method name="sinh">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the hyperbolic sine of [code]x[/code].
+ [codeblock]
+ a = log(2.0) # Returns 0.693147
+ sinh(a) # Returns 0.75
+ [/codeblock]
+ </description>
+ </method>
+ <method name="smoothstep">
+ <return type="float">
+ </return>
+ <argument index="0" name="from" type="float">
+ </argument>
+ <argument index="1" name="to" type="float">
+ </argument>
+ <argument index="2" name="x" type="float">
+ </argument>
+ <description>
+ Returns the result of smoothly interpolating the value of [code]x[/code] between [code]0[/code] and [code]1[/code], based on the where [code]x[/code] lies with respect to the edges [code]from[/code] and [code]to[/code].
+ The return value is [code]0[/code] if [code]x &lt;= from[/code], and [code]1[/code] if [code]x &gt;= to[/code]. If [code]x[/code] lies between [code]from[/code] and [code]to[/code], the returned value follows an S-shaped curve that maps [code]x[/code] between [code]0[/code] and [code]1[/code].
+ This S-shaped curve is the cubic Hermite interpolator, given by [code]f(x) = 3*x^2 - 2*x^3[/code].
+ [codeblock]
+ smoothstep(0, 2, -5.0) # Returns 0.0
+ smoothstep(0, 2, 0.5) # Returns 0.15625
+ smoothstep(0, 2, 1.0) # Returns 0.5
+ smoothstep(0, 2, 2.0) # Returns 1.0
+ [/codeblock]
+ </description>
+ </method>
+ <method name="sqrt">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the square root of [code]x[/code], where [code]x[/code] is a non-negative number.
+ [codeblock]
+ sqrt(9) # Returns 3
+ [/codeblock]
+ [b]Note:[/b]Negative values of [code]x[/code] return NaN. If you need negative inputs, use [code]System.Numerics.Complex[/code] in C#.
+ </description>
+ </method>
+ <method name="step_decimals">
+ <return type="int">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the position of the first non-zero digit, after the decimal point. Note that the maximum return value is 10, which is a design decision in the implementation.
+ [codeblock]
+ # n is 0
+ n = step_decimals(5)
+ # n is 4
+ n = step_decimals(1.0005)
+ # n is 9
+ n = step_decimals(0.000000005)
+ [/codeblock]
+ </description>
+ </method>
+ <method name="stepify">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <argument index="1" name="step" type="float">
+ </argument>
+ <description>
+ Snaps float value [code]x[/code] to a given [code]step[/code]. This can also be used to round a floating point number to an arbitrary number of decimals.
+ [codeblock]
+ stepify(100, 32) # Returns 96
+ stepify(3.14159, 0.01) # Returns 3.14
+ [/codeblock]
+ See also [method ceil], [method floor], and [method round].
+ </description>
+ </method>
+ <method name="str" qualifiers="vararg">
+ <return type="String">
+ </return>
+ <description>
+ Converts one or more arguments to string in the best way possible.
+ </description>
+ </method>
+ <method name="str2var">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="string" type="String">
+ </argument>
+ <description>
+ Converts a formatted string that was returned by [method var2str] to the original value.
+ [codeblock]
+ a = '{ "a": 1, "b": 2 }'
+ b = str2var(a)
+ print(b["a"]) # Prints 1
+ [/codeblock]
+ </description>
+ </method>
+ <method name="tan">
+ <return type="float">
+ </return>
+ <argument index="0" name="angle_rad" type="float">
+ </argument>
+ <description>
+ Returns the tangent of angle [code]angle_rad[/code] in radians.
+ [codeblock]
+ tan(deg2rad(45)) # Returns 1
+ [/codeblock]
+ </description>
+ </method>
+ <method name="tanh">
+ <return type="float">
+ </return>
+ <argument index="0" name="x" type="float">
+ </argument>
+ <description>
+ Returns the hyperbolic tangent of [code]x[/code].
+ [codeblock]
+ a = log(2.0) # Returns 0.693147
+ tanh(a) # Returns 0.6
+ [/codeblock]
+ </description>
+ </method>
+ <method name="typeof">
+ <return type="int">
+ </return>
+ <argument index="0" name="variable" type="Variant">
+ </argument>
+ <description>
+ Returns the internal type of the given Variant object, using the [enum Variant.Type] values.
+ [codeblock]
+ p = parse_json('["a", "b", "c"]')
+ if typeof(p) == TYPE_ARRAY:
+ print(p[0]) # Prints a
+ else:
+ print("unexpected results")
+ [/codeblock]
+ </description>
+ </method>
+ <method name="var2bytes">
+ <return type="PackedByteArray">
+ </return>
+ <argument index="0" name="variable" type="Variant">
+ </argument>
+ <description>
+ Encodes a [Variant] value to a byte array, without encoding objects. Deserialization can be done with [method bytes2var].
+ [b]Note:[/b] If you need object serialization, see [method var2bytes_with_objects].
+ </description>
+ </method>
+ <method name="var2bytes_with_objects">
+ <return type="PackedByteArray">
+ </return>
+ <argument index="0" name="variable" type="Variant">
+ </argument>
+ <description>
+ Encodes a [Variant] value to a byte array. Encoding objects is allowed (and can potentially include code). Deserialization can be done with [method bytes2var_with_objects].
+ </description>
+ </method>
+ <method name="var2str">
+ <return type="String">
+ </return>
+ <argument index="0" name="variable" type="Variant">
+ </argument>
+ <description>
+ Converts a Variant [code]variable[/code] to a formatted string that can later be parsed using [method str2var].
+ [codeblock]
+ a = { "a": 1, "b": 2 }
+ print(var2str(a))
+ [/codeblock]
+ prints
+ [codeblock]
+ {
+ "a": 1,
+ "b": 2
+ }
+ [/codeblock]
+ </description>
+ </method>
+ <method name="weakref">
+ <return type="Variant">
+ </return>
+ <argument index="0" name="obj" type="Variant">
+ </argument>
+ <description>
+ Returns a weak reference to an object, or [code]null[/code] is the argument is invalid.
+ 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="wrapf">
+ <return type="float">
+ </return>
+ <argument index="0" name="value" type="float">
+ </argument>
+ <argument index="1" name="min" type="float">
+ </argument>
+ <argument index="2" name="max" type="float">
+ </argument>
+ <description>
+ Wraps float [code]value[/code] between [code]min[/code] and [code]max[/code].
+ Usable for creating loop-alike behavior or infinite surfaces.
+ [codeblock]
+ # Infinite loop between 5.0 and 9.9
+ value = wrapf(value + 0.1, 5.0, 10.0)
+ [/codeblock]
+ [codeblock]
+ # Infinite rotation (in radians)
+ angle = wrapf(angle + 0.1, 0.0, TAU)
+ [/codeblock]
+ [codeblock]
+ # Infinite rotation (in radians)
+ angle = wrapf(angle + 0.1, -PI, PI)
+ [/codeblock]
+ [b]Note:[/b] If [code]min[/code] is [code]0[/code], this is equivalent to [method fposmod], so prefer using that instead.
+ [code]wrapf[/code] is more flexible than using the [method fposmod] approach by giving the user control over the minimum value.
+ </description>
+ </method>
+ <method name="wrapi">
+ <return type="int">
+ </return>
+ <argument index="0" name="value" type="int">
+ </argument>
+ <argument index="1" name="min" type="int">
+ </argument>
+ <argument index="2" name="max" type="int">
+ </argument>
+ <description>
+ Wraps integer [code]value[/code] between [code]min[/code] and [code]max[/code].
+ Usable for creating loop-alike behavior or infinite surfaces.
+ [codeblock]
+ # Infinite loop between 5 and 9
+ frame = wrapi(frame + 1, 5, 10)
+ [/codeblock]
+ [codeblock]
+ # result is -2
+ var result = wrapi(-6, -5, -1)
+ [/codeblock]
+ </description>
+ </method>
</methods>
<members>
<member name="AudioServer" type="AudioServer" setter="" getter="">
@@ -952,130 +2093,61 @@
<constant name="BUTTON_MASK_XBUTTON2" value="256" enum="ButtonList">
Extra mouse button 2 mask.
</constant>
- <constant name="JOY_INVALID_BUTTON" value="-1" enum="JoyButtonList">
+ <constant name="JOY_BUTTON_INVALID" value="-1" enum="JoyButtonList">
An invalid game controller button.
</constant>
<constant name="JOY_BUTTON_A" value="0" enum="JoyButtonList">
- Game controller SDL button A.
+ Game controller SDL button A. Corresponds to the bottom action button: Sony Cross, Xbox A, Nintendo B.
</constant>
<constant name="JOY_BUTTON_B" value="1" enum="JoyButtonList">
- Game controller SDL button B.
+ Game controller SDL button B. Corresponds to the right action button: Sony Circle, Xbox B, Nintendo A.
</constant>
<constant name="JOY_BUTTON_X" value="2" enum="JoyButtonList">
- Game controller SDL button X.
+ Game controller SDL button X. Corresponds to the left action button: Sony Square, Xbox X, Nintendo Y.
</constant>
<constant name="JOY_BUTTON_Y" value="3" enum="JoyButtonList">
- Game controller SDL button Y.
+ Game controller SDL button Y. Corresponds to the top action button: Sony Triangle, Xbox Y, Nintendo X.
</constant>
<constant name="JOY_BUTTON_BACK" value="4" enum="JoyButtonList">
- Game controller SDL back button.
+ Game controller SDL back button. Corresponds to the Sony Select, Xbox Back, Nintendo - button.
</constant>
<constant name="JOY_BUTTON_GUIDE" value="5" enum="JoyButtonList">
- Game controller SDL guide button.
+ Game controller SDL guide button. Corresponds to the Sony PS, Xbox Home button.
</constant>
<constant name="JOY_BUTTON_START" value="6" enum="JoyButtonList">
- Game controller SDL start button.
+ Game controller SDL start button. Corresponds to the Nintendo + button.
</constant>
<constant name="JOY_BUTTON_LEFT_STICK" value="7" enum="JoyButtonList">
- Game controller SDL left stick button.
+ Game controller SDL left stick button. Corresponds to the Sony L3, Xbox L/LS button.
</constant>
<constant name="JOY_BUTTON_RIGHT_STICK" value="8" enum="JoyButtonList">
- Game controller SDL right stick button.
+ Game controller SDL right stick button. Corresponds to the Sony R3, Xbox R/RS button.
</constant>
<constant name="JOY_BUTTON_LEFT_SHOULDER" value="9" enum="JoyButtonList">
- Game controller SDL left shoulder button.
+ Game controller SDL left shoulder button. Corresponds to the Sony L1, Xbox LB button.
</constant>
<constant name="JOY_BUTTON_RIGHT_SHOULDER" value="10" enum="JoyButtonList">
- Game controller SDL right shoulder button.
+ Game controller SDL right shoulder button. Corresponds to the Sony R1, Xbox RB button.
</constant>
<constant name="JOY_BUTTON_DPAD_UP" value="11" enum="JoyButtonList">
- Game controller SDL D-pad up button.
+ Game controller D-pad up button.
</constant>
<constant name="JOY_BUTTON_DPAD_DOWN" value="12" enum="JoyButtonList">
- Game controller SDL D-pad down button.
+ Game controller D-pad down button.
</constant>
<constant name="JOY_BUTTON_DPAD_LEFT" value="13" enum="JoyButtonList">
- Game controller SDL D-pad left button.
+ Game controller D-pad left button.
</constant>
<constant name="JOY_BUTTON_DPAD_RIGHT" value="14" enum="JoyButtonList">
- Game controller SDL D-pad right button.
+ Game controller D-pad right button.
</constant>
- <constant name="JOY_SDL_BUTTONS" value="15" enum="JoyButtonList">
+ <constant name="JOY_BUTTON_SDL_MAX" value="15" enum="JoyButtonList">
The number of SDL game controller buttons.
</constant>
- <constant name="JOY_SONY_X" value="0" enum="JoyButtonList">
- Sony DualShock controller X button maps to SDL button A.
- </constant>
- <constant name="JOY_SONY_CROSS" value="0" enum="JoyButtonList">
- Sony DualShock controller cross button maps to SDL button A.
- </constant>
- <constant name="JOY_SONY_CIRCLE" value="1" enum="JoyButtonList">
- Sony DualShock controller circle button maps to SDL button B.
- </constant>
- <constant name="JOY_SONY_SQUARE" value="2" enum="JoyButtonList">
- Sony DualShock controller square button maps to SDL button X.
- </constant>
- <constant name="JOY_SONY_TRIANGLE" value="3" enum="JoyButtonList">
- Sony DualShock controller triangle button maps to SDL button Y.
- </constant>
- <constant name="JOY_SONY_SELECT" value="4" enum="JoyButtonList">
- Sony DualShock controller select button maps to SDL back button.
- </constant>
- <constant name="JOY_SONY_START" value="6" enum="JoyButtonList">
- Sony DualShock controller start button maps to SDL start button.
- </constant>
- <constant name="JOY_SONY_PS" value="5" enum="JoyButtonList">
- Sony DualShock controller PS button maps to SDL guide button.
- </constant>
- <constant name="JOY_SONY_L1" value="9" enum="JoyButtonList">
- Sony DualShock controller L1 button maps to SDL left shoulder button.
- </constant>
- <constant name="JOY_SONY_R1" value="10" enum="JoyButtonList">
- Sony DualShock controller R1 button maps to SDL right shoulder button.
- </constant>
- <constant name="JOY_SONY_L3" value="7" enum="JoyButtonList">
- Sony DualShock controller L3 button maps to SDL left stick button.
- </constant>
- <constant name="JOY_SONY_R3" value="8" enum="JoyButtonList">
- Sony DualShock controller R3 button maps to SDL right stick button.
- </constant>
- <constant name="JOY_XBOX_A" value="0" enum="JoyButtonList">
- Xbox game controller A button maps to SDL button A.
- </constant>
- <constant name="JOY_XBOX_B" value="1" enum="JoyButtonList">
- Xbox game controller B button maps to SDL button B.
- </constant>
- <constant name="JOY_XBOX_X" value="2" enum="JoyButtonList">
- Xbox game controller X button maps to SDL button X.
- </constant>
- <constant name="JOY_XBOX_Y" value="3" enum="JoyButtonList">
- Xbox game controller Y button maps to SDL button Y.
- </constant>
- <constant name="JOY_XBOX_BACK" value="4" enum="JoyButtonList">
- Xbox game controller back button maps to SDL back button.
- </constant>
- <constant name="JOY_XBOX_START" value="6" enum="JoyButtonList">
- Xbox game controller start button maps to SDL start button.
- </constant>
- <constant name="JOY_XBOX_HOME" value="5" enum="JoyButtonList">
- Xbox game controller home button maps to SDL guide button.
- </constant>
- <constant name="JOY_XBOX_LS" value="7" enum="JoyButtonList">
- Xbox game controller left stick button maps to SDL left stick button.
- </constant>
- <constant name="JOY_XBOX_RS" value="8" enum="JoyButtonList">
- Xbox game controller right stick button maps to SDL right stick button.
- </constant>
- <constant name="JOY_XBOX_LB" value="9" enum="JoyButtonList">
- Xbox game controller left bumper button maps to SDL left shoulder button.
- </constant>
- <constant name="JOY_XBOX_RB" value="10" enum="JoyButtonList">
- Xbox game controller right bumper button maps to SDL right shoulder button.
- </constant>
<constant name="JOY_BUTTON_MAX" value="36" enum="JoyButtonList">
- The maximum number of game controller buttons.
+ The maximum number of game controller buttons: Android supports up to 36 buttons.
</constant>
- <constant name="JOY_INVALID_AXIS" value="-1" enum="JoyAxisList">
+ <constant name="JOY_AXIS_INVALID" value="-1" enum="JoyAxisList">
An invalid game controller axis.
</constant>
<constant name="JOY_AXIS_LEFT_X" value="0" enum="JoyAxisList">
@@ -1096,41 +2168,11 @@
<constant name="JOY_AXIS_TRIGGER_RIGHT" value="5" enum="JoyAxisList">
Game controller right trigger axis.
</constant>
- <constant name="JOY_SDL_AXES" value="6" enum="JoyAxisList">
+ <constant name="JOY_AXIS_SDL_MAX" value="6" enum="JoyAxisList">
The number of SDL game controller axes.
</constant>
- <constant name="JOY_AXIS_0_X" value="0" enum="JoyAxisList">
- Game controller joystick 0 x-axis.
- </constant>
- <constant name="JOY_AXIS_0_Y" value="1" enum="JoyAxisList">
- Game controller joystick 0 y-axis.
- </constant>
- <constant name="JOY_AXIS_1_X" value="2" enum="JoyAxisList">
- Game controller joystick 1 x-axis.
- </constant>
- <constant name="JOY_AXIS_1_Y" value="3" enum="JoyAxisList">
- Game controller joystick 1 y-axis.
- </constant>
- <constant name="JOY_AXIS_2_X" value="4" enum="JoyAxisList">
- Game controller joystick 2 x-axis.
- </constant>
- <constant name="JOY_AXIS_2_Y" value="5" enum="JoyAxisList">
- Game controller joystick 2 y-axis.
- </constant>
- <constant name="JOY_AXIS_3_X" value="6" enum="JoyAxisList">
- Game controller joystick 3 x-axis.
- </constant>
- <constant name="JOY_AXIS_3_Y" value="7" enum="JoyAxisList">
- Game controller joystick 3 y-axis.
- </constant>
- <constant name="JOY_AXIS_4_X" value="8" enum="JoyAxisList">
- Game controller joystick 4 x-axis.
- </constant>
- <constant name="JOY_AXIS_4_Y" value="9" enum="JoyAxisList">
- Game controller joystick 4 y-axis.
- </constant>
<constant name="JOY_AXIS_MAX" value="10" enum="JoyAxisList">
- The maximum number of game controller axes.
+ The maximum number of game controller axes: OpenVR supports up to 5 Joysticks making a total of 10 axes.
</constant>
<constant name="MIDI_MESSAGE_NOTE_OFF" value="8" enum="MidiMessageList">
MIDI note OFF message.
diff --git a/doc/classes/Array.xml b/doc/classes/Array.xml
index 0ad5960d4a..6a9eb89602 100644
--- a/doc/classes/Array.xml
+++ b/doc/classes/Array.xml
@@ -38,8 +38,9 @@
GD.Print(array1 + array2); // Prints [One, 2, 3, Four]
[/csharp]
[/codeblocks]
- Note that concatenating with [code]+=[/code] operator will create a new array. If you want to append another array to an existing array, [method append_array] is more efficient.
+ [b]Note:[/b] Concatenating with the [code]+=[/code] operator will create a new array, which has a cost. If you want to append another array to an existing array, [method append_array] is more efficient.
[b]Note:[/b] Arrays are always passed by reference. To get a copy of an array which can be modified independently of the original array, use [method duplicate].
+ [b]Note:[/b] When declaring an array with [code]const[/code], the array itself can still be mutated by defining the values at individual indices or pushing/removing elements. Using [code]const[/code] will only prevent assigning the constant with another value after it was initialized.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml
index 6ea7b79dff..eb0b941da5 100644
--- a/doc/classes/Control.xml
+++ b/doc/classes/Control.xml
@@ -446,7 +446,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns a color from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]type[/code].
+ Returns a color from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code].
[codeblocks]
[gdscript]
func _ready():
@@ -469,7 +469,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns a constant from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]type[/code].
+ Returns a constant from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code].
</description>
</method>
<method name="get_theme_font" qualifiers="const">
@@ -480,7 +480,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns a font from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]type[/code].
+ Returns a font from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code].
</description>
</method>
<method name="get_theme_icon" qualifiers="const">
@@ -491,7 +491,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns an icon from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]type[/code].
+ Returns an icon from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code].
</description>
</method>
<method name="get_theme_stylebox" qualifiers="const">
@@ -502,7 +502,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns a [StyleBox] from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]type[/code].
+ Returns a [StyleBox] from assigned [Theme] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code].
</description>
</method>
<method name="get_tooltip" qualifiers="const">
@@ -566,7 +566,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns [code]true[/code] if [Color] with given [code]name[/code] and associated with [Control] of given [code]type[/code] exists in assigned [Theme].
+ Returns [code]true[/code] if [Color] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code] exists in assigned [Theme].
</description>
</method>
<method name="has_theme_color_override" qualifiers="const">
@@ -586,7 +586,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns [code]true[/code] if constant with given [code]name[/code] and associated with [Control] of given [code]type[/code] exists in assigned [Theme].
+ Returns [code]true[/code] if constant with given [code]name[/code] and associated with [Control] of given [code]node_type[/code] exists in assigned [Theme].
</description>
</method>
<method name="has_theme_constant_override" qualifiers="const">
@@ -606,7 +606,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns [code]true[/code] if font with given [code]name[/code] and associated with [Control] of given [code]type[/code] exists in assigned [Theme].
+ Returns [code]true[/code] if font with given [code]name[/code] and associated with [Control] of given [code]node_type[/code] exists in assigned [Theme].
</description>
</method>
<method name="has_theme_font_override" qualifiers="const">
@@ -626,7 +626,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns [code]true[/code] if icon with given [code]name[/code] and associated with [Control] of given [code]type[/code] exists in assigned [Theme].
+ Returns [code]true[/code] if icon with given [code]name[/code] and associated with [Control] of given [code]node_type[/code] exists in assigned [Theme].
</description>
</method>
<method name="has_theme_icon_override" qualifiers="const">
@@ -655,7 +655,7 @@
<argument index="1" name="type" type="StringName" default="&quot;&quot;">
</argument>
<description>
- Returns [code]true[/code] if [StyleBox] with given [code]name[/code] and associated with [Control] of given [code]type[/code] exists in assigned [Theme].
+ Returns [code]true[/code] if [StyleBox] with given [code]name[/code] and associated with [Control] of given [code]node_type[/code] exists in assigned [Theme].
</description>
</method>
<method name="has_theme_stylebox_override" qualifiers="const">
diff --git a/doc/classes/Curve2D.xml b/doc/classes/Curve2D.xml
index 8ac6258e97..2d50d98a74 100644
--- a/doc/classes/Curve2D.xml
+++ b/doc/classes/Curve2D.xml
@@ -80,7 +80,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
- Returns the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
+ Returns the position of the control point leading to the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
</description>
</method>
<method name="get_point_out" qualifiers="const">
@@ -89,7 +89,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
- Returns the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
+ Returns the position of the control point leading out of the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0)[/code].
</description>
</method>
<method name="get_point_position" qualifiers="const">
@@ -152,7 +152,7 @@
<argument index="1" name="position" type="Vector2">
</argument>
<description>
- Sets the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
+ Sets the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
</description>
</method>
<method name="set_point_out">
@@ -163,7 +163,7 @@
<argument index="1" name="position" type="Vector2">
</argument>
<description>
- Sets the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
+ Sets the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
</description>
</method>
<method name="set_point_position">
diff --git a/doc/classes/Curve3D.xml b/doc/classes/Curve3D.xml
index fe454d90cc..a6a0e0c33d 100644
--- a/doc/classes/Curve3D.xml
+++ b/doc/classes/Curve3D.xml
@@ -95,7 +95,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
- Returns the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
+ Returns the position of the control point leading to the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
</description>
</method>
<method name="get_point_out" qualifiers="const">
@@ -104,7 +104,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
- Returns the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
+ Returns the position of the control point leading out of the vertex [code]idx[/code]. The returned position is relative to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console, and returns [code](0, 0, 0)[/code].
</description>
</method>
<method name="get_point_position" qualifiers="const">
@@ -189,7 +189,7 @@
<argument index="1" name="position" type="Vector3">
</argument>
<description>
- Sets the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
+ Sets the position of the control point leading to the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
</description>
</method>
<method name="set_point_out">
@@ -200,7 +200,7 @@
<argument index="1" name="position" type="Vector3">
</argument>
<description>
- Sets the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console.
+ Sets the position of the control point leading out of the vertex [code]idx[/code]. If the index is out of bounds, the function sends an error to the console. The position is relative to the vertex.
</description>
</method>
<method name="set_point_position">
diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml
index dc38fdf0e8..cd0b5ac027 100644
--- a/doc/classes/Dictionary.xml
+++ b/doc/classes/Dictionary.xml
@@ -11,17 +11,28 @@
Creating a dictionary:
[codeblocks]
[gdscript]
- var my_dir = {} # Creates an empty dictionary.
- var points_dir = {"White": 50, "Yellow": 75, "Orange": 100}
- var another_dir = {
- key1: value1,
- key2: value2,
- key3: value3,
+ var my_dict = {} # Creates an empty dictionary.
+
+ var dict_variable_key = "Another key name"
+ var dict_variable_value = "value2"
+ var another_dict = {
+ "Some key name": "value1",
+ dict_variable_key: dict_variable_value,
+ }
+
+ var points_dict = {"White": 50, "Yellow": 75, "Orange": 100}
+
+ # Alternative Lua-style syntax.
+ # Doesn't require quotes around keys, but only string constants can be used as key names.
+ # Additionally, key names must start with a letter or an underscore.
+ # Here, `some_key` is a string literal, not a variable!
+ another_dict = {
+ some_key = 42,
}
[/gdscript]
[csharp]
- var myDir = new Godot.Collections.Dictionary(); // Creates an empty dictionary.
- var pointsDir = new Godot.Collections.Dictionary
+ var myDict = new Godot.Collections.Dictionary(); // Creates an empty dictionary.
+ var pointsDict = new Godot.Collections.Dictionary
{
{"White", 50},
{"Yellow", 75},
@@ -33,15 +44,15 @@
[codeblocks]
[gdscript]
export(string, "White", "Yellow", "Orange") var my_color
- var points_dir = {"White": 50, "Yellow": 75, "Orange": 100}
+ var points_dict = {"White": 50, "Yellow": 75, "Orange": 100}
func _ready():
# We can't use dot syntax here as `my_color` is a variable.
- var points = points_dir[my_color]
+ var points = points_dict[my_color]
[/gdscript]
[csharp]
[Export(PropertyHint.Enum, "White,Yellow,Orange")]
public string MyColor { get; set; }
- public Godot.Collections.Dictionary pointsDir = new Godot.Collections.Dictionary
+ public Godot.Collections.Dictionary pointsDict = new Godot.Collections.Dictionary
{
{"White", 50},
{"Yellow", 75},
@@ -50,7 +61,7 @@
public override void _Ready()
{
- int points = (int)pointsDir[MyColor];
+ int points = (int)pointsDict[MyColor];
}
[/csharp]
[/codeblocks]
@@ -58,7 +69,7 @@
Dictionaries can contain more complex data:
[codeblocks]
[gdscript]
- my_dir = {"First Array": [1, 2, 3, 4]} # Assigns an Array to a String key.
+ my_dict = {"First Array": [1, 2, 3, 4]} # Assigns an Array to a String key.
[/gdscript]
[csharp]
var myDir = new Godot.Collections.Dictionary
@@ -70,8 +81,8 @@
To add a key to an existing dictionary, access it like an existing key and assign to it:
[codeblocks]
[gdscript]
- var points_dir = {"White": 50, "Yellow": 75, "Orange": 100}
- points_dir["Blue"] = 150 # Add "Blue" as a key and assign 150 as its value.
+ var points_dict = {"White": 50, "Yellow": 75, "Orange": 100}
+ points_dict["Blue"] = 150 # Add "Blue" as a key and assign 150 as its value.
[/gdscript]
[csharp]
var pointsDir = new Godot.Collections.Dictionary
@@ -80,7 +91,7 @@
{"Yellow", 75},
{"Orange", 100}
};
- pointsDir["blue"] = 150; // Add "Blue" as a key and assign 150 as its value.
+ pointsDict["blue"] = 150; // Add "Blue" as a key and assign 150 as its value.
[/csharp]
[/codeblocks]
Finally, dictionaries can contain different types of keys and values in the same dictionary:
@@ -89,22 +100,22 @@
# This is a valid dictionary.
# To access the string "Nested value" below, use `my_dir.sub_dir.sub_key` or `my_dir["sub_dir"]["sub_key"]`.
# Indexing styles can be mixed and matched depending on your needs.
- var my_dir = {
+ var my_dict = {
"String Key": 5,
4: [1, 2, 3],
7: "Hello",
- "sub_dir": {"sub_key": "Nested value"},
+ "sub_dict": {"sub_key": "Nested value"},
}
[/gdscript]
[csharp]
// This is a valid dictionary.
// To access the string "Nested value" below, use `my_dir.sub_dir.sub_key` or `my_dir["sub_dir"]["sub_key"]`.
// Indexing styles can be mixed and matched depending on your needs.
- var myDir = new Godot.Collections.Dictionary {
+ var myDict = new Godot.Collections.Dictionary {
{"String Key", 5},
{4, new Godot.Collections.Array{1,2,3}},
{7, "Hello"},
- {"sub_dir", new Godot.Collections.Dictionary{{"sub_key", "Nested value"}}}
+ {"sub_dict", new Godot.Collections.Dictionary{{"sub_key", "Nested value"}}}
};
[/csharp]
[/codeblocks]
@@ -117,11 +128,11 @@
func compare_arrays():
print(array1 == array2) # Will print true.
- var dir1 = {"a": 1, "b": 2, "c": 3}
- var dir2 = {"a": 1, "b": 2, "c": 3}
+ var dict1 = {"a": 1, "b": 2, "c": 3}
+ var dict2 = {"a": 1, "b": 2, "c": 3}
func compare_dictionaries():
- print(dir1 == dir2) # Will NOT print true.
+ print(dict1 == dict2) # Will NOT print true.
[/gdscript]
[csharp]
// You have to use GD.Hash().
@@ -135,35 +146,36 @@
GD.Print(GD.Hash(array1) == GD.Hash(array2)); // Will print true.
}
- public Godot.Collections.Dictionary dir1 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
- public Godot.Collections.Dictionary dir2 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
+ public Godot.Collections.Dictionary dict1 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
+ public Godot.Collections.Dictionary dict2 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
public void CompareDictionaries()
{
- GD.Print(dir1 == dir2); // Will NOT print true.
+ GD.Print(dict1 == dict2); // Will NOT print true.
}
[/csharp]
[/codeblocks]
You need to first calculate the dictionary's hash with [method hash] before you can compare them:
[codeblocks]
[gdscript]
- var dir1 = {"a": 1, "b": 2, "c": 3}
- var dir2 = {"a": 1, "b": 2, "c": 3}
+ var dict1 = {"a": 1, "b": 2, "c": 3}
+ var dict2 = {"a": 1, "b": 2, "c": 3}
func compare_dictionaries():
- print(dir1.hash() == dir2.hash()) # Will print true.
+ print(dict1.hash() == dict2.hash()) # Will print true.
[/gdscript]
[csharp]
// You have to use GD.Hash().
- public Godot.Collections.Dictionary dir1 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
- public Godot.Collections.Dictionary dir2 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
+ public Godot.Collections.Dictionary dict1 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
+ public Godot.Collections.Dictionary dict2 = new Godot.Collections.Dictionary{{"a", 1}, {"b", 2}, {"c", 3}};
public void CompareDictionaries()
{
- GD.Print(GD.Hash(dir1) == GD.Hash(dir2)); // Will print true.
+ GD.Print(GD.Hash(dict1) == GD.Hash(dict2)); // Will print true.
}
[/csharp]
[/codeblocks]
+ [b]Note:[/b] When declaring a dictionary with [code]const[/code], the dictionary itself can still be mutated by defining the values of individual keys. Using [code]const[/code] will only prevent assigning the constant with another value after it was initialized.
</description>
<tutorials>
<link title="GDScript basics: Dictionary">https://docs.godotengine.org/en/latest/getting_started/scripting/gdscript/gdscript_basics.html#dictionary</link>
@@ -322,7 +334,7 @@
<return type="int">
</return>
<description>
- Returns the size of the dictionary (in pairs).
+ Returns the number of keys in the dictionary.
</description>
</method>
<method name="values">
diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml
index 3b108468de..edf27b1660 100644
--- a/doc/classes/Image.xml
+++ b/doc/classes/Image.xml
@@ -4,10 +4,12 @@
Image datatype.
</brief_description>
<description>
- Native image datatype. Contains image data, which can be converted to a [Texture2D], and several functions to interact with it. The maximum width and height for an [Image] are [constant MAX_WIDTH] and [constant MAX_HEIGHT].
- [b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics hardware limitations. Larger images will fail to import.
+ Native image datatype. Contains image data which can be converted to an [ImageTexture] and provides commonly used [i]image processing[/i] methods. The maximum width and height for an [Image] are [constant MAX_WIDTH] and [constant MAX_HEIGHT].
+ An [Image] cannot be assigned to a [code]texture[/code] property of an object directly (such as [Sprite2D]), and has to be converted manually to an [ImageTexture] first.
+ [b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics hardware limitations. Larger images may fail to import.
</description>
<tutorials>
+ <link title="Importing images">https://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_images.html</link>
</tutorials>
<methods>
<method name="blend_rect">
@@ -344,6 +346,8 @@
</argument>
<description>
Loads an image from file [code]path[/code]. See [url=https://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations.
+ [b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external images at run-time, such as images located at the [code]user://[/code] directory, and may not work in exported projects.
+ See also [ImageTexture] description for usage examples.
</description>
</method>
<method name="load_bmp_from_buffer">
diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml
index d122d74e85..2bea482bc1 100644
--- a/doc/classes/ImageTexture.xml
+++ b/doc/classes/ImageTexture.xml
@@ -4,10 +4,31 @@
A [Texture2D] based on an [Image].
</brief_description>
<description>
- A [Texture2D] based on an [Image]. Can be created from an [Image] with [method create_from_image].
- [b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics hardware limitations. Larger images will fail to import.
+ A [Texture2D] based on an [Image]. For an image to be displayed, an [ImageTexture] has to be created from it using the [method create_from_image] method:
+ [codeblock]
+ var texture = ImageTexture.new()
+ var image = Image.new()
+ image.load("res://icon.png")
+ texture.create_from_image(image)
+ $Sprite2D.texture = texture
+ [/codeblock]
+ This way, textures can be created at run-time by loading images both from within the editor and externally.
+ [b]Warning:[/b] Prefer to load imported textures with [method @GDScript.load] over loading them from within the filesystem dynamically with [method Image.load], as it may not work in exported projects:
+ [codeblock]
+ var texture = load("res://icon.png")
+ $Sprite2D.texture = texture
+ [/codeblock]
+ This is because images have to be imported as [StreamTexture2D] first to be loaded with [method @GDScript.load]. If you'd still like to load an image file just like any other [Resource], import it as an [Image] resource instead, and then load it normally using the [method @GDScript.load] method.
+ But do note that the image data can still be retrieved from an imported texture as well using the [method Texture2D.get_data] method, which returns a copy of the data:
+ [codeblock]
+ var texture = load("res://icon.png")
+ var image : Image = texture.get_data()
+ [/codeblock]
+ An [ImageTexture] is not meant to be operated from within the editor interface directly, and is mostly useful for rendering images on screen dynamically via code. If you need to generate images procedurally from within the editor, consider saving and importing images as custom texture resources implementing a new [EditorImportPlugin].
+ [b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations.
</description>
<tutorials>
+ <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link>
</tutorials>
<methods>
<method name="create_from_image">
@@ -16,14 +37,14 @@
<argument index="0" name="image" type="Image">
</argument>
<description>
- Create a new [ImageTexture] from an [Image].
+ Initializes the texture by allocating and setting the data from an [Image].
</description>
</method>
<method name="get_format" qualifiers="const">
<return type="int" enum="Image.Format">
</return>
<description>
- Returns the format of the [ImageTexture], one of [enum Image.Format].
+ Returns the format of the texture, one of [enum Image.Format].
</description>
</method>
<method name="set_size_override">
@@ -32,7 +53,7 @@
<argument index="0" name="size" type="Vector2">
</argument>
<description>
- Resizes the [ImageTexture] to the specified dimensions.
+ Resizes the texture to the specified dimensions.
</description>
</method>
<method name="update">
@@ -43,7 +64,9 @@
<argument index="1" name="immediate" type="bool" default="false">
</argument>
<description>
- Replaces the texture's data with a new [code]image[/code]. If [code]immediate[/code] is [code]true[/code], it will take effect immediately after the call.
+ Replaces the texture's data with a new [Image]. If [code]immediate[/code] is [code]true[/code], it will take effect immediately after the call.
+ [b]Note:[/b] The texture has to be initialized first with the [method create_from_image] method before it can be updated. The new image dimensions, format, and mipmaps configuration should match the existing texture's image configuration, otherwise it has to be re-created with the [method create_from_image] method.
+ Use this method over [method create_from_image] if you need to update the texture frequently, which is faster than allocating additional memory for a new texture each time.
</description>
</method>
</methods>
diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml
index fb0ed8ff62..eafae7310c 100644
--- a/doc/classes/Input.xml
+++ b/doc/classes/Input.xml
@@ -54,6 +54,15 @@
[b]Note:[/b] This method only works on iOS, Android, and UWP. On other platforms, it always returns [constant Vector3.ZERO].
</description>
</method>
+ <method name="get_action_raw_strength" qualifiers="const">
+ <return type="float">
+ </return>
+ <argument index="0" name="action" type="StringName">
+ </argument>
+ <description>
+ Returns a value between 0 and 1 representing the raw intensity of the given action, ignoring the action's deadzone. In most cases, you should use [method get_action_strength] instead.
+ </description>
+ </method>
<method name="get_action_strength" qualifiers="const">
<return type="float">
</return>
@@ -63,6 +72,18 @@
Returns a value between 0 and 1 representing the intensity of the given action. In a joypad, for example, the further away the axis (analog sticks or L2, R2 triggers) is from the dead zone, the closer the value will be to 1. If the action is mapped to a control that has no axis as the keyboard, the value returned will be 0 or 1.
</description>
</method>
+ <method name="get_axis" qualifiers="const">
+ <return type="float">
+ </return>
+ <argument index="0" name="negative_action" type="StringName">
+ </argument>
+ <argument index="1" name="positive_action" type="StringName">
+ </argument>
+ <description>
+ Get axis input by specifying two actions, one negative and one positive.
+ This is a horthand for writing [code]Input.get_action_strength("positive_action") - Input.get_action_strength("negative_action")[/code].
+ </description>
+ </method>
<method name="get_connected_joypads">
<return type="Array">
</return>
@@ -205,6 +226,25 @@
Returns the mouse mode. See the constants for more information.
</description>
</method>
+ <method name="get_vector" qualifiers="const">
+ <return type="Vector2">
+ </return>
+ <argument index="0" name="negative_x" type="StringName">
+ </argument>
+ <argument index="1" name="positive_x" type="StringName">
+ </argument>
+ <argument index="2" name="negative_y" type="StringName">
+ </argument>
+ <argument index="3" name="positive_y" type="StringName">
+ </argument>
+ <argument index="4" name="deadzone" type="float" default="-1.0">
+ </argument>
+ <description>
+ Get vector input by specifying four actions, two for the X axis and two for the Y axis, negative and positive.
+ This method is useful when getting vector input, such as from a joystick, directional pad, arrows, or WASD. The vector has its length limited to 1 and has a circular deadzone, which is useful for using vector input as movement.
+ By default, the deadzone is automatically calculated from the average of the action deadzones. However, you can override the deadzone to be whatever you want (on the range of 0 to 1).
+ </description>
+ </method>
<method name="is_action_just_pressed" qualifiers="const">
<return type="bool">
</return>
diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml
index 667879a922..dd782209e5 100644
--- a/doc/classes/InputEventWithModifiers.xml
+++ b/doc/classes/InputEventWithModifiers.xml
@@ -27,6 +27,10 @@
<member name="shift" type="bool" setter="set_shift" getter="get_shift" default="false">
State of the [kbd]Shift[/kbd] modifier.
</member>
+ <member name="store_command" type="bool" setter="set_store_command" getter="is_storing_command" default="true">
+ If [code]true[/code], pressing [kbd]Cmd[/kbd] on macOS or [kbd]Ctrl[/kbd] on all other platforms will both be serialized as [member command]. If [code]false[/code], those same keys will be serialized as [member meta] on macOS and [member control] on all other platforms.
+ This aids with cross-platform compatibility when developing e.g. on Windows for macOS, or vice-versa.
+ </member>
</members>
<constants>
</constants>
diff --git a/doc/classes/JSONParser.xml b/doc/classes/JSONParser.xml
new file mode 100644
index 0000000000..31ba295418
--- /dev/null
+++ b/doc/classes/JSONParser.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<class name="JSONParser" inherits="Reference" version="4.0">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <tutorials>
+ </tutorials>
+ <methods>
+ <method name="decode_data">
+ <return type="int" enum="Error">
+ </return>
+ <argument index="0" name="data" type="Variant">
+ </argument>
+ <argument index="1" name="indent" type="String" default="&quot;&quot;">
+ </argument>
+ <argument index="2" name="sort_keys" type="bool" default="true">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_data" qualifiers="const">
+ <return type="Variant">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_error_line" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_error_text" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_string" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="parse_string">
+ <return type="int" enum="Error">
+ </return>
+ <argument index="0" name="json_string" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
diff --git a/doc/classes/MarginContainer.xml b/doc/classes/MarginContainer.xml
index fb5f437239..c8eebd4677 100644
--- a/doc/classes/MarginContainer.xml
+++ b/doc/classes/MarginContainer.xml
@@ -6,13 +6,22 @@
<description>
Adds a top, left, bottom, and right margin to all [Control] nodes that are direct children of the container. To control the [MarginContainer]'s margin, use the [code]margin_*[/code] theme properties listed below.
[b]Note:[/b] Be careful, [Control] margin values are different than the constant margin values. If you want to change the custom margin values of the [MarginContainer] by code, you should use the following examples:
- [codeblock]
+ [codeblocks]
+ [gdscript]
var margin_value = 100
set("custom_constants/margin_top", margin_value)
set("custom_constants/margin_left", margin_value)
set("custom_constants/margin_bottom", margin_value)
set("custom_constants/margin_right", margin_value)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ int marginValue = 100;
+ Set("custom_constants/margin_top", marginValue);
+ Set("custom_constants/margin_left", marginValue);
+ Set("custom_constants/margin_bottom", marginValue);
+ Set("custom_constants/margin_right", marginValue);
+ [/csharp]
+ [/codeblocks]
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/NavigationPolygon.xml b/doc/classes/NavigationPolygon.xml
index e75efa3b27..38921078d7 100644
--- a/doc/classes/NavigationPolygon.xml
+++ b/doc/classes/NavigationPolygon.xml
@@ -6,22 +6,41 @@
<description>
There are two ways to create polygons. Either by using the [method add_outline] method, or using the [method add_polygon] method.
Using [method add_outline]:
- [codeblock]
+ [codeblocks]
+ [gdscript]
var polygon = NavigationPolygon.new()
var outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
polygon.add_outline(outline)
polygon.make_polygons_from_outlines()
$NavigationRegion2D.navpoly = polygon
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var polygon = new NavigationPolygon();
+ var outline = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
+ polygon.AddOutline(outline);
+ polygon.MakePolygonsFromOutlines();
+ GetNode&lt;NavigationRegion2D&gt;("NavigationRegion2D").Navpoly = polygon;
+ [/csharp]
+ [/codeblocks]
Using [method add_polygon] and indices of the vertices array.
- [codeblock]
+ [codeblocks]
+ [gdscript]
var polygon = NavigationPolygon.new()
var vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, 50), Vector2(50, 0)])
- polygon.set_vertices(vertices)
+ polygon.vertices = vertices
var indices = PackedInt32Array(0, 3, 1)
polygon.add_polygon(indices)
$NavigationRegion2D.navpoly = polygon
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var polygon = new NavigationPolygon();
+ var vertices = new Vector2[] { new Vector2(0, 0), new Vector2(0, 50), new Vector2(50, 50), new Vector2(50, 0) };
+ polygon.Vertices = vertices;
+ var indices = new int[] { 0, 3, 1 };
+ polygon.AddPolygon(indices);
+ GetNode&lt;NavigationRegion2D&gt;("NavigationRegion2D").Navpoly = polygon;
+ [/csharp]
+ [/codeblocks]
</description>
<tutorials>
<link title="2D Navigation Demo">https://godotengine.org/asset-library/asset/117</link>
diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml
index 2e8b76865d..3f212fa0f6 100644
--- a/doc/classes/Node.xml
+++ b/doc/classes/Node.xml
@@ -130,11 +130,22 @@
Adds a child node. Nodes can have any number of children, but every child must have a unique name. Child nodes are automatically deleted when the parent node is deleted, so an entire scene can be removed by deleting its topmost node.
If [code]legible_unique_name[/code] is [code]true[/code], the child node will have an human-readable name based on the name of the node being instanced instead of its type.
[b]Note:[/b] If the child node already has a parent, the function will fail. Use [method remove_child] first to remove the node from its current parent. For example:
- [codeblock]
+ [codeblocks]
+ [gdscript]
+ var child_node = get_child(0)
if child_node.get_parent():
child_node.get_parent().remove_child(child_node)
add_child(child_node)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ Node childNode = GetChild(0);
+ if (childNode.GetParent() != null)
+ {
+ childNode.GetParent().RemoveChild(childNode);
+ }
+ AddChild(childNode);
+ [/csharp]
+ [/codeblocks]
If you need the child node to be added below a specific node in the list of children, use [method add_sibling] instead of this method.
[b]Note:[/b] If you want a child to be persisted to a [PackedScene], you must set [member owner] in addition to calling [method add_child]. This is typically relevant for [url=https://godot.readthedocs.io/en/latest/tutorials/misc/running_code_in_the_editor.html]tool scripts[/url] and [url=https://godot.readthedocs.io/en/latest/tutorials/plugins/editor/index.html]editor plugins[/url]. If [method add_child] is called without setting [member owner], the newly added [Node] will not be visible in the scene tree, though it will be visible in the 2D/3D view.
</description>
@@ -275,12 +286,20 @@
/root/Swamp/Goblin
[/codeblock]
Possible paths are:
- [codeblock]
+ [codeblocks]
+ [gdscript]
get_node("Sword")
get_node("Backpack/Dagger")
get_node("../Swamp/Alligator")
get_node("/root/MyGame")
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ GetNode("Sword");
+ GetNode("Backpack/Dagger");
+ GetNode("../Swamp/Alligator");
+ GetNode("/root/MyGame");
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_node_and_resource">
@@ -292,11 +311,18 @@
Fetches a node and one of its resources as specified by the [NodePath]'s subname (e.g. [code]Area2D/CollisionShape2D:shape[/code]). If several nested resources are specified in the [NodePath], the last one will be fetched.
The return value is an array of size 3: the first index points to the [Node] (or [code]null[/code] if not found), the second index points to the [Resource] (or [code]null[/code] if not found), and the third index is the remaining [NodePath], if any.
For example, assuming that [code]Area2D/CollisionShape2D[/code] is a valid node and that its [code]shape[/code] property has been assigned a [RectangleShape2D] resource, one could have this kind of output:
- [codeblock]
+ [codeblocks]
+ [gdscript]
print(get_node_and_resource("Area2D/CollisionShape2D")) # [[CollisionShape2D:1161], Null, ]
print(get_node_and_resource("Area2D/CollisionShape2D:shape")) # [[CollisionShape2D:1161], [RectangleShape2D:1156], ]
print(get_node_and_resource("Area2D/CollisionShape2D:shape:extents")) # [[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ GD.Print(GetNodeAndResource("Area2D/CollisionShape2D")); // [[CollisionShape2D:1161], Null, ]
+ GD.Print(GetNodeAndResource("Area2D/CollisionShape2D:shape")); // [[CollisionShape2D:1161], [RectangleShape2D:1156], ]
+ GD.Print(GetNodeAndResource("Area2D/CollisionShape2D:shape:extents")); // [[CollisionShape2D:1161], [RectangleShape2D:1156], :extents]
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_node_or_null" qualifiers="const">
diff --git a/doc/classes/NodePath.xml b/doc/classes/NodePath.xml
index 93ede047fd..36835d9e94 100644
--- a/doc/classes/NodePath.xml
+++ b/doc/classes/NodePath.xml
@@ -51,7 +51,7 @@
The "subnames" optionally included after the path to the target node can point to resources or properties, and can also be nested.
Examples of valid NodePaths (assuming that those nodes exist and have the referenced resources or properties):
[codeblock]
- # Points to the Sprite2D node
+ # Points to the Sprite2D node.
"Path2D/PathFollow2D/Sprite2D"
# Points to the Sprite2D node and its "texture" resource.
# get_node() would retrieve "Sprite2D", while get_node_and_resource()
@@ -70,14 +70,23 @@
<return type="NodePath">
</return>
<description>
- Returns a node path with a colon character ([code]:[/code]) prepended, transforming it to a pure property path with no node name (defaults to resolving from the current node).
- [codeblock]
- # This will be parsed as a node path to the "x" property in the "position" node
+ Returns a node path with a colon character ([code]:[/code]) prepended, transforming it to a pure property path with no node name (defaults to resolving from the from the current node).
+ [codeblocks]
+ [gdscript]
+ # This will be parsed as a node path to the "x" property in the "position" node.
var node_path = NodePath("position:x")
- # This will be parsed as a node path to the "x" component of the "position" property in the current node
+ # This will be parsed as a node path to the "x" component of the "position" property in the current node.
var property_path = node_path.get_as_property_path()
print(property_path) # :position:x
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ // This will be parsed as a node path to the "x" property in the "position" node.
+ var nodePath = new NodePath("position:x");
+ // This will be parsed as a node path to the "x" component of the "position" property in the current node.
+ NodePath propertyPath = nodePath.GetAsPropertyPath();
+ GD.Print(propertyPath); // :position:x
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_concatenated_subnames">
@@ -85,10 +94,16 @@
</return>
<description>
Returns all subnames concatenated with a colon character ([code]:[/code]) as separator, i.e. the right side of the first colon in a node path.
- [codeblock]
+ [codeblocks]
+ [gdscript]
var nodepath = NodePath("Path2D/PathFollow2D/Sprite2D:texture:load_path")
print(nodepath.get_concatenated_subnames()) # texture:load_path
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var nodepath = new NodePath("Path2D/PathFollow2D/Sprite2D:texture:load_path");
+ GD.Print(nodepath.GetConcatenatedSubnames()); // texture:load_path
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_name">
@@ -98,12 +113,20 @@
</argument>
<description>
Gets the node name indicated by [code]idx[/code] (0 to [method get_name_count]).
- [codeblock]
+ [codeblocks]
+ [gdscript]
var node_path = NodePath("Path2D/PathFollow2D/Sprite2D")
print(node_path.get_name(0)) # Path2D
print(node_path.get_name(1)) # PathFollow2D
print(node_path.get_name(2)) # Sprite
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var nodePath = new NodePath("Path2D/PathFollow2D/Sprite2D");
+ GD.Print(nodePath.GetName(0)); // Path2D
+ GD.Print(nodePath.GetName(1)); // PathFollow2D
+ GD.Print(nodePath.GetName(2)); // Sprite
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_name_count">
@@ -121,11 +144,18 @@
</argument>
<description>
Gets the resource or property name indicated by [code]idx[/code] (0 to [method get_subname_count]).
- [codeblock]
+ [codeblocks]
+ [gdscript]
var node_path = NodePath("Path2D/PathFollow2D/Sprite2D:texture:load_path")
print(node_path.get_subname(0)) # texture
print(node_path.get_subname(1)) # load_path
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var nodePath = new NodePath("Path2D/PathFollow2D/Sprite2D:texture:load_path");
+ GD.Print(nodePath.GetSubname(0)); // texture
+ GD.Print(nodePath.GetSubname(1)); // load_path
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_subname_count">
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index 1487c9e078..1d80695798 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -85,18 +85,36 @@
If [code]blocking[/code] is [code]false[/code], the Godot thread will continue while the new process runs. It is not possible to retrieve the shell output in non-blocking mode, so [code]output[/code] will be empty.
The return value also depends on the blocking mode. When blocking, the method will return an exit code of the process. When non-blocking, the method returns a process ID, which you can use to monitor the process (and potentially terminate it with [method kill]). If the process forking (non-blocking) or opening (blocking) fails, the method will return [code]-1[/code] or another exit code.
Example of blocking mode and retrieving the shell output:
- [codeblock]
+ [codeblocks]
+ [gdscript]
var output = []
var exit_code = OS.execute("ls", ["-l", "/tmp"], true, output)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var output = new Godot.Collections.Array();
+ int exitCode = OS.Execute("ls", new string[] {"-l", "/tmp"}, true, output);
+ [/csharp]
+ [/codeblocks]
Example of non-blocking mode, running another instance of the project and storing its process ID:
- [codeblock]
+ [codeblocks]
+ [gdscript]
var pid = OS.execute(OS.get_executable_path(), [], false)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var pid = OS.Execute(OS.GetExecutablePath(), new string[] {}, false);
+ [/csharp]
+ [/codeblocks]
If you wish to access a shell built-in or perform a composite command, a platform-specific shell can be invoked. For example:
- [codeblock]
+ [codeblocks]
+ [gdscript]
+ var output = []
OS.execute("CMD.exe", ["/C", "cd %TEMP% &amp;&amp; dir"], true, output)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var output = new Godot.Collections.Array();
+ OS.Execute("CMD.exe", new string[] {"/C", "cd %TEMP% &amp;&amp; dir"}, true, output);
+ [/csharp]
+ [/codeblocks]
[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and Windows.
</description>
</method>
@@ -118,13 +136,26 @@
You can also incorporate environment variables using the [method get_environment] method.
You can set [code]editor/main_run_args[/code] in the Project Settings to define command-line arguments to be passed by the editor when running the project.
Here's a minimal example on how to parse command-line arguments into a dictionary using the [code]--key=value[/code] form for arguments:
- [codeblock]
+ [codeblocks]
+ [gdscript]
var arguments = {}
for argument in OS.get_cmdline_args():
if argument.find("=") &gt; -1:
var key_value = argument.split("=")
arguments[key_value[0].lstrip("--")] = key_value[1]
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var arguments = new Godot.Collections.Dictionary();
+ foreach (var argument in OS.GetCmdlineArgs())
+ {
+ if (argument.Find("=") &gt; -1)
+ {
+ string[] keyValue = argument.Split("=");
+ arguments[keyValue[0].LStrip("--")] = keyValue[1];
+ }
+ }
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_connected_midi_inputs">
diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml
index 6b500d5ac3..e3c78e08f1 100644
--- a/doc/classes/PCKPacker.xml
+++ b/doc/classes/PCKPacker.xml
@@ -5,12 +5,20 @@
</brief_description>
<description>
The [PCKPacker] is used to create packages that can be loaded into a running project using [method ProjectSettings.load_resource_pack].
- [codeblock]
+ [codeblocks]
+ [gdscript]
var packer = PCKPacker.new()
packer.pck_start("test.pck")
packer.add_file("res://text.txt", "text.txt")
packer.flush()
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var packer = new PCKPacker();
+ packer.PckStart("test.pck");
+ packer.AddFile("res://text.txt", "text.txt");
+ packer.Flush();
+ [/csharp]
+ [/codeblocks]
The above [PCKPacker] creates package [code]test.pck[/code], then adds a file named [code]text.txt[/code] at the root of the package.
</description>
<tutorials>
diff --git a/doc/classes/PackedByteArray.xml b/doc/classes/PackedByteArray.xml
index 4a6893879d..91d066260b 100644
--- a/doc/classes/PackedByteArray.xml
+++ b/doc/classes/PackedByteArray.xml
@@ -135,10 +135,16 @@
</return>
<description>
Returns a hexadecimal representation of this array as a [String].
- [codeblock]
+ [codeblocks]
+ [gdscript]
var array = PackedByteArray([11, 46, 255])
print(array.hex_encode()) # Prints: 0b2eff
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var array = new byte[] {11, 46, 255};
+ GD.Print(array.HexEncode()); // Prints: 0b2eff
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="insert">
diff --git a/doc/classes/PackedScene.xml b/doc/classes/PackedScene.xml
index be40ab05de..d15bcfd114 100644
--- a/doc/classes/PackedScene.xml
+++ b/doc/classes/PackedScene.xml
@@ -8,14 +8,23 @@
Can be used to save a node to a file. When saving, the node as well as all the node it owns get saved (see [code]owner[/code] property on [Node]).
[b]Note:[/b] The node doesn't need to own itself.
[b]Example of loading a saved scene:[/b]
- [codeblock]
- # Use `load()` instead of `preload()` if the path isn't known at compile-time.
+ [codeblocks]
+ [gdscript]
+ # Use load() instead of preload() if the path isn't known at compile-time.
var scene = preload("res://scene.tscn").instance()
# Add the node as a child of the node the script is attached to.
add_child(scene)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ // C# has no preload, so you have to always use ResourceLoader.Load&lt;PackedScene&gt;().
+ var scene = ResourceLoader.Load&lt;PackedScene&gt;("res://scene.tscn").Instance();
+ // Add the node as a child of the node the script is attached to.
+ AddChild(scene);
+ [/csharp]
+ [/codeblocks]
[b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [code]Node2D[/code] ([code]node[/code]), [code]RigidBody2D[/code] ([code]rigid[/code]) and [code]CollisionObject2D[/code] ([code]collision[/code]). [code]collision[/code] is a child of [code]rigid[/code] which is a child of [code]node[/code]. Only [code]rigid[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code].
- [codeblock]
+ [codeblocks]
+ [gdscript]
# Create the objects.
var node = Node2D.new()
var rigid = RigidBody2D.new()
@@ -27,15 +36,41 @@
# Change owner of `rigid`, but not of `collision`.
rigid.owner = node
-
var scene = PackedScene.new()
+
# Only `node` and `rigid` are now packed.
var result = scene.pack(node)
if result == OK:
- var error = ResourceSaver.save("res://path/name.scn", scene) # Or "user://..."
+ var error = ResourceSaver.save("res://path/name.tscn", scene) # Or "user://..."
if error != OK:
push_error("An error occurred while saving the scene to disk.")
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ // Create the objects.
+ var node = new Node2D();
+ var rigid = new RigidBody2D();
+ var collision = new CollisionShape2D();
+
+ // Create the object hierarchy.
+ rigid.AddChild(collision);
+ node.AddChild(rigid);
+
+ // Change owner of `rigid`, but not of `collision`.
+ rigid.Owner = node;
+ var scene = new PackedScene();
+
+ // Only `node` and `rigid` are now packed.
+ Error result = scene.Pack(node);
+ if (result == Error.Ok)
+ {
+ Error error = ResourceSaver.Save("res://path/name.tscn", scene); // Or "user://..."
+ if (error != Error.Ok)
+ {
+ GD.PushError("An error occurred while saving the scene to disk.");
+ }
+ }
+ [/csharp]
+ [/codeblocks]
</description>
<tutorials>
<link title="2D Role Playing Game Demo">https://godotengine.org/asset-library/asset/520</link>
diff --git a/doc/classes/PacketPeerUDP.xml b/doc/classes/PacketPeerUDP.xml
index cab821b4c0..d7cf6cc8c6 100644
--- a/doc/classes/PacketPeerUDP.xml
+++ b/doc/classes/PacketPeerUDP.xml
@@ -124,17 +124,36 @@
<description>
Waits for a packet to arrive on the listening port. See [method listen].
[b]Note:[/b] [method wait] can't be interrupted once it has been called. This can be worked around by allowing the other party to send a specific "death pill" packet like this:
- [codeblock]
- # Server
- socket.set_dest_address("127.0.0.1", 789)
- socket.put_packet("Time to stop".to_ascii())
+ [codeblocks]
+ [gdscript]
+ socket = PacketPeerUDP.new()
+ # Server
+ socket.set_dest_address("127.0.0.1", 789)
+ socket.put_packet("Time to stop".to_ascii())
- # Client
- while socket.wait() == OK:
- var data = socket.get_packet().get_string_from_ascii()
- if data == "Time to stop":
- return
- [/codeblock]
+ # Client
+ while socket.wait() == OK:
+ var data = socket.get_packet().get_string_from_ascii()
+ if data == "Time to stop":
+ return
+ [/gdscript]
+ [csharp]
+ var socket = new PacketPeerUDP();
+ // Server
+ socket.SetDestAddress("127.0.0.1", 789);
+ socket.PutPacket("Time To Stop".ToAscii());
+
+ // Client
+ while (socket.Wait() == OK)
+ {
+ string data = socket.GetPacket().GetStringFromASCII();
+ if (data == "Time to stop")
+ {
+ return;
+ }
+ }
+ [/csharp]
+ [/codeblocks]
</description>
</method>
</methods>
diff --git a/doc/classes/Performance.xml b/doc/classes/Performance.xml
index 0a9079ce71..9e9c5063ae 100644
--- a/doc/classes/Performance.xml
+++ b/doc/classes/Performance.xml
@@ -24,14 +24,53 @@
</argument>
<description>
Adds a custom monitor with name same as id. You can specify the category of monitor using '/' in id. If there are more than one '/' then default category is used. Default category is "Custom".
- [codeblock]
- Performance.add_custom_monitor("MyCategory/MyMonitor", some_callable) # Adds monitor with name "MyName" to category "MyCategory"
- Performance.add_custom_monitor("MyMonitor", some_callable) # Adds monitor with name "MyName" to category "Custom"
- # Note: "MyCategory/MyMonitor" and "MyMonitor" have same name but different ids so above code is valid
- Performance.add_custom_monitor("Custom/MyMonitor", some_callable) # Adds monitor with name "MyName" to category "Custom"
- # Note: "MyMonitor" and "Custom/MyMonitor" have same name and same category but different ids so above code is valid
- Performance.add_custom_monitor("MyCategoryOne/MyCategoryTwo/MyMonitor", some_callable) # Adds monitor with name "MyCategoryOne/MyCategoryTwo/MyMonitor" to category "Custom"
- [/codeblock]
+ [codeblocks]
+ [gdscript]
+ func _ready():
+ var monitor_value = Callable(self, "get_monitor_value")
+
+ # Adds monitor with name "MyName" to category "MyCategory".
+ Performance.add_custom_monitor("MyCategory/MyMonitor", monitor_value)
+
+ # Adds monitor with name "MyName" to category "Custom".
+ # Note: "MyCategory/MyMonitor" and "MyMonitor" have same name but different ids so the code is valid.
+ Performance.add_custom_monitor("MyMonitor", monitor_value)
+
+ # Adds monitor with name "MyName" to category "Custom".
+ # Note: "MyMonitor" and "Custom/MyMonitor" have same name and same category but different ids so the code is valid.
+ Performance.add_custom_monitor("Custom/MyMonitor", monitor_value)
+
+ # Adds monitor with name "MyCategoryOne/MyCategoryTwo/MyMonitor" to category "Custom".
+ Performance.add_custom_monitor("MyCategoryOne/MyCategoryTwo/MyMonitor", monitor_value)
+
+ func get_monitor_value():
+ return randi() % 25
+ [/gdscript]
+ [csharp]
+ public override void _Ready()
+ {
+ var monitorValue = new Callable(this, nameof(GetMonitorValue));
+
+ // Adds monitor with name "MyName" to category "MyCategory".
+ Performance.AddCustomMonitor("MyCategory/MyMonitor", monitorValue);
+ // Adds monitor with name "MyName" to category "Custom".
+ // Note: "MyCategory/MyMonitor" and "MyMonitor" have same name but different ids so the code is valid.
+ Performance.AddCustomMonitor("MyMonitor", monitorValue);
+
+ // Adds monitor with name "MyName" to category "Custom".
+ // Note: "MyMonitor" and "Custom/MyMonitor" have same name and same category but different ids so the code is valid.
+ Performance.AddCustomMonitor("Custom/MyMonitor", monitorValue);
+
+ // Adds monitor with name "MyCategoryOne/MyCategoryTwo/MyMonitor" to category "Custom".
+ Performance.AddCustomMonitor("MyCategoryOne/MyCategoryTwo/MyMonitor", monitorValue);
+ }
+
+ public int GetMonitorValue()
+ {
+ return GD.Randi() % 25;
+ }
+ [/csharp]
+ [/codeblocks]
The debugger calls the callable to get the value of custom monitor. The callable must return a number.
Callables are called with arguments supplied in argument array.
[b]Note:[/b] It throws an error if given id is already present.
@@ -61,9 +100,14 @@
</argument>
<description>
Returns the value of one of the available monitors. You should provide one of the [enum Monitor] constants as the argument, like this:
- [codeblock]
- print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the console
- [/codeblock]
+ [codeblocks]
+ [gdscript]
+ print(Performance.get_monitor(Performance.TIME_FPS)) # Prints the FPS to the console.
+ [/gdscript]
+ [csharp]
+ GD.Print(Performance.GetMonitor(Performance.Monitor.TimeFps)); // Prints the FPS to the console.
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="get_monitor_modification_time">
diff --git a/doc/classes/PhysicsShapeQueryParameters2D.xml b/doc/classes/PhysicsShapeQueryParameters2D.xml
index 93ca684b95..4d7fc61517 100644
--- a/doc/classes/PhysicsShapeQueryParameters2D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters2D.xml
@@ -34,19 +34,34 @@
</member>
<member name="shape_rid" type="RID" setter="set_shape_rid" getter="get_shape_rid">
The queried shape's [RID] that will be used for collision/intersection queries. Use this over [member shape] if you want to optimize for performance using the Servers API:
- [codeblock]
- var shape_rid = PhysicsServer2D.circle_shape_create()
- var radius = 64
- PhysicsServer2D.shape_set_data(shape_rid, radius)
+ [codeblocks]
+ [gdscript]
+ var shape_rid = PhysicsServer2D.circle_shape_create()
+ var radius = 64
+ PhysicsServer2D.shape_set_data(shape_rid, radius)
- var params = PhysicsShapeQueryParameters2D.new()
- params.shape_rid = shape_rid
+ var params = PhysicsShapeQueryParameters2D.new()
+ params.shape_rid = shape_rid
- # Execute physics queries here...
+ # Execute physics queries here...
- # Release the shape when done with physics queries.
- PhysicsServer2D.free_rid(shape_rid)
- [/codeblock]
+ # Release the shape when done with physics queries.
+ PhysicsServer2D.free_rid(shape_rid)
+ [/gdscript]
+ [csharp]
+ RID shapeRid = PhysicsServer2D.CircleShapeCreate();
+ int radius = 64;
+ PhysicsServer2D.ShapeSetData(shapeRid, radius);
+
+ var params = new PhysicsShapeQueryParameters2D();
+ params.ShapeRid = shapeRid;
+
+ // Execute physics queries here...
+
+ // Release the shape when done with physics queries.
+ PhysicsServer2D.FreeRid(shapeRid);
+ [/csharp]
+ [/codeblocks]
</member>
<member name="transform" type="Transform2D" setter="set_transform" getter="get_transform" default="Transform2D( 1, 0, 0, 1, 0, 0 )">
The queried shape's transform matrix.
diff --git a/doc/classes/PhysicsShapeQueryParameters3D.xml b/doc/classes/PhysicsShapeQueryParameters3D.xml
index 167fb31bb3..4b43ea66fc 100644
--- a/doc/classes/PhysicsShapeQueryParameters3D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters3D.xml
@@ -31,19 +31,34 @@
</member>
<member name="shape_rid" type="RID" setter="set_shape_rid" getter="get_shape_rid">
The queried shape's [RID] that will be used for collision/intersection queries. Use this over [member shape] if you want to optimize for performance using the Servers API:
- [codeblock]
- var shape_rid = PhysicsServer3D.shape_create(PhysicsServer3D.SHAPE_SPHERE)
- var radius = 2.0
- PhysicsServer3D.shape_set_data(shape_rid, radius)
+ [codeblocks]
+ [gdscript]
+ var shape_rid = PhysicsServer3D.shape_create(PhysicsServer3D.SHAPE_SPHERE)
+ var radius = 2.0
+ PhysicsServer3D.shape_set_data(shape_rid, radius)
- var params = PhysicsShapeQueryParameters3D.new()
- params.shape_rid = shape_rid
+ var params = PhysicsShapeQueryParameters3D.new()
+ params.shape_rid = shape_rid
- # Execute physics queries here...
+ # Execute physics queries here...
- # Release the shape when done with physics queries.
- PhysicsServer3D.free_rid(shape_rid)
- [/codeblock]
+ # Release the shape when done with physics queries.
+ PhysicsServer3D.free_rid(shape_rid)
+ [/gdscript]
+ [csharp]
+ RID shapeRid = PhysicsServer3D.ShapeCreate(PhysicsServer3D.ShapeType.Sphere);
+ float radius = 2.0f;
+ PhysicsServer3D.ShapeSetData(shapeRid, radius);
+
+ var params = new PhysicsShapeQueryParameters3D();
+ params.ShapeRid = shapeRid;
+
+ // Execute physics queries here...
+
+ // Release the shape when done with physics queries.
+ PhysicsServer3D.FreeRid(shapeRid);
+ [/csharp]
+ [/codeblocks]
</member>
<member name="transform" type="Transform" setter="set_transform" getter="get_transform" default="Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )">
The queried shape's transform matrix.
diff --git a/doc/classes/Popup.xml b/doc/classes/Popup.xml
index 6f77f3371d..b8d8a55412 100644
--- a/doc/classes/Popup.xml
+++ b/doc/classes/Popup.xml
@@ -12,6 +12,8 @@
</methods>
<members>
<member name="borderless" type="bool" setter="set_flag" getter="get_flag" override="true" default="true" />
+ <member name="close_on_parent_focus" type="bool" setter="set_close_on_parent_focus" getter="get_close_on_parent_focus" default="true">
+ </member>
<member name="transient" type="bool" setter="set_transient" getter="is_transient" override="true" default="true" />
<member name="unresizable" type="bool" setter="set_flag" getter="get_flag" override="true" default="true" />
<member name="visible" type="bool" setter="set_visible" getter="is_visible" override="true" default="false" />
diff --git a/doc/classes/PrimitiveMesh.xml b/doc/classes/PrimitiveMesh.xml
index 9e7f26ed4f..7e9bccc1d7 100644
--- a/doc/classes/PrimitiveMesh.xml
+++ b/doc/classes/PrimitiveMesh.xml
@@ -14,11 +14,18 @@
</return>
<description>
Returns mesh arrays used to constitute surface of [Mesh]. The result can be passed to [method ArrayMesh.add_surface_from_arrays] to create a new surface. For example:
- [codeblock]
- var c := CylinderMesh.new()
- var arr_mesh := ArrayMesh.new()
+ [codeblocks]
+ [gdscript]
+ var c = CylinderMesh.new()
+ var arr_mesh = ArrayMesh.new()
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, c.get_mesh_arrays())
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ var c = new CylinderMesh();
+ var arrMesh = new ArrayMesh();
+ arrMesh.AddSurfaceFromArrays(Mesh.PrimitiveType.Triangles, c.GetMeshArrays());
+ [/csharp]
+ [/codeblocks]
</description>
</method>
</methods>
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 7ca2dae4d7..96d71db383 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -25,7 +25,8 @@
- [code]type[/code]: [int] (see [enum Variant.Type])
- optionally [code]hint[/code]: [int] (see [enum PropertyHint]) and [code]hint_string[/code]: [String]
[b]Example:[/b]
- [codeblock]
+ [codeblocks]
+ [gdscript]
ProjectSettings.set("category/property_name", 0)
var property_info = {
@@ -36,7 +37,21 @@
}
ProjectSettings.add_property_info(property_info)
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ ProjectSettings.Singleton.Set("category/property_name", 0);
+
+ var propertyInfo = new Godot.Collections.Dictionary
+ {
+ {"name", "category/propertyName"},
+ {"type", Variant.Type.Int},
+ {"hint", PropertyHint.Enum},
+ {"hint_string", "one,two,three"},
+ };
+
+ ProjectSettings.AddPropertyInfo(propertyInfo);
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="clear">
@@ -65,9 +80,14 @@
<description>
Returns the value of a setting.
[b]Example:[/b]
- [codeblock]
+ [codeblocks]
+ [gdscript]
print(ProjectSettings.get_setting("application/config/name"))
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ GD.Print(ProjectSettings.GetSetting("application/config/name"));
+ [/csharp]
+ [/codeblocks]
</description>
</method>
<method name="globalize_path" qualifiers="const">
@@ -178,9 +198,14 @@
<description>
Sets the value of a setting.
[b]Example:[/b]
- [codeblock]
+ [codeblocks]
+ [gdscript]
ProjectSettings.set_setting("application/config/name", "Example")
- [/codeblock]
+ [/gdscript]
+ [csharp]
+ ProjectSettings.SetSetting("application/config/name", "Example");
+ [/csharp]
+ [/codeblocks]
</description>
</method>
</methods>
@@ -858,7 +883,7 @@
Maximum number of warnings allowed to be sent from the debugger. Over this value, content is dropped. This helps not to stall the debugger connection.
</member>
<member name="network/limits/packet_peer_stream/max_buffer_po2" type="int" setter="" getter="" default="16">
- Default size of packet peer stream for deserializing Godot data. Over this size, data is dropped.
+ Default size of packet peer stream for deserializing Godot data (in bytes, specified as a power of two). The default value [code]16[/code] is equal to 65,536 bytes. Over this size, data is dropped.
</member>
<member name="network/limits/tcp/connect_timeout_seconds" type="int" setter="" getter="" default="30">
Timeout (in seconds) for connection attempts using TCP.
@@ -895,18 +920,30 @@
<member name="physics/2d/default_gravity" type="int" setter="" getter="" default="98">
The default gravity strength in 2D.
[b]Note:[/b] This property is only read when the project starts. To change the default gravity at runtime, use the following code sample:
- [codeblock]
+ [codeblocks]
+ [gdscript]
# Set the default gravity strength to 98.
- PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), PhysicsServer2D.AREA_PARAM_GRAVITY, 98)
- [/codeblock]
+ PhysicsServer2D.area_set_param(get_viewport().find_world_2d().space, PhysicsServer2D.AREA_PARAM_GRAVITY, 98)
+ [/gdscript]
+ [csharp]
+ // Set the default gravity strength to 98.
+ PhysicsServer2D.AreaSetParam(GetViewport().FindWorld2d().Space, PhysicsServer2D.AreaParameter.Gravity, 98);
+ [/csharp]
+ [/codeblocks]
</member>
<member name="physics/2d/default_gravity_vector" type="Vector2" setter="" getter="" default="Vector2( 0, 1 )">
The default gravity direction in 2D.
[b]Note:[/b] This property is only read when the project starts. To change the default gravity vector at runtime, use the following code sample:
- [codeblock]
+ [codeblocks]
+ [gdscript]
# Set the default gravity direction to `Vector2(0, 1)`.
- PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), PhysicsServer2D.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))
- [/codeblock]
+ PhysicsServer2D.area_set_param(get_viewport().find_world_2d().space, PhysicsServer2D.AREA_PARAM_GRAVITY_VECTOR, Vector2.DOWN)
+ [/gdscript]
+ [csharp]
+ // Set the default gravity direction to `Vector2(0, 1)`.
+ PhysicsServer2D.AreaSetParam(GetViewport().FindWorld2d().Space, PhysicsServer2D.AreaParameter.GravityVector, Vector2.Down)
+ [/csharp]
+ [/codeblocks]
</member>
<member name="physics/2d/default_linear_damp" type="float" setter="" getter="" default="0.1">
The default linear damp in 2D.
@@ -942,18 +979,30 @@
<member name="physics/3d/default_gravity" type="float" setter="" getter="" default="9.8">
The default gravity strength in 3D.
[b]Note:[/b] This property is only read when the project starts. To change the default gravity at runtime, use the following code sample:
- [codeblock]
+ [codeblocks]
+ [gdscript]
# Set the default gravity strength to 9.8.
- PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)
- [/codeblock]
+ PhysicsServer3D.area_set_param(get_viewport().find_world().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)
+ [/gdscript]
+ [csharp]
+ // Set the default gravity strength to 9.8.
+ PhysicsServer3D.AreaSetParam(GetViewport().FindWorld().Space, PhysicsServer3D.AreaParameter.Gravity, 9.8);
+ [/csharp]
+ [/codeblocks]
</member>
<member name="physics/3d/default_gravity_vector" type="Vector3" setter="" getter="" default="Vector3( 0, -1, 0 )">
The default gravity direction in 3D.
[b]Note:[/b] This property is only read when the project starts. To change the default gravity vector at runtime, use the following code sample:
- [codeblock]
+ [codeblocks]
+ [gdscript]
# Set the default gravity direction to `Vector3(0, -1, 0)`.
- PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))
- [/codeblock]
+ PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3.DOWN)
+ [/gdscript]
+ [csharp]
+ // Set the default gravity direction to `Vector3(0, -1, 0)`.
+ PhysicsServer3D.AreaSetParam(GetViewport().FindWorld().Space, PhysicsServer3D.AreaParameter.GravityVector, Vector3.Down)
+ [/csharp]
+ [/codeblocks]
</member>
<member name="physics/3d/default_linear_damp" type="float" setter="" getter="" default="0.1">
The default linear damp in 3D.
diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml
index 4ea457047f..a95ce6c663 100644
--- a/doc/classes/SceneTree.xml
+++ b/doc/classes/SceneTree.xml
@@ -181,7 +181,7 @@
<argument index="0" name="exit_code" type="int" default="-1">
</argument>
<description>
- Quits the application. A process [code]exit_code[/code] can optionally be passed as an argument. If this argument is [code]0[/code] or greater, it will override the [member OS.exit_code] defined before quitting the application.
+ Quits the application at the end of the current iteration. A process [code]exit_code[/code] can optionally be passed as an argument. If this argument is [code]0[/code] or greater, it will override the [member OS.exit_code] defined before quitting the application.
</description>
</method>
<method name="reload_current_scene">
diff --git a/doc/classes/Texture2D.xml b/doc/classes/Texture2D.xml
index ff8b439a3d..2270b95c63 100644
--- a/doc/classes/Texture2D.xml
+++ b/doc/classes/Texture2D.xml
@@ -7,6 +7,7 @@
A texture works by registering an image in the video hardware, which then can be used in 3D models or 2D [Sprite2D] or GUI [Control].
Textures are often created by loading them from a file. See [method @GDScript.load].
[Texture2D] is a base for other resources. It cannot be used directly.
+ [b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations. Larger textures may fail to import.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml
index 2824159f0e..783614c4af 100644
--- a/doc/classes/Theme.xml
+++ b/doc/classes/Theme.xml
@@ -23,10 +23,10 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Clears the [Color] at [code]name[/code] if the theme has [code]type[/code].
+ Clears the [Color] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="clear_constant">
@@ -34,10 +34,10 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Clears the constant at [code]name[/code] if the theme has [code]type[/code].
+ Clears the constant at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="clear_font">
@@ -45,10 +45,10 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Clears the [Font] at [code]name[/code] if the theme has [code]type[/code].
+ Clears the [Font] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="clear_icon">
@@ -56,10 +56,10 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Clears the icon at [code]name[/code] if the theme has [code]type[/code].
+ Clears the icon at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="clear_stylebox">
@@ -67,10 +67,10 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Clears [StyleBox] at [code]name[/code] if the theme has [code]type[/code].
+ Clears [StyleBox] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="copy_default_theme">
@@ -94,19 +94,19 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns the [Color] at [code]name[/code] if the theme has [code]type[/code].
+ Returns the [Color] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_color_list" qualifiers="const">
<return type="PackedStringArray">
</return>
- <argument index="0" name="type" type="String">
+ <argument index="0" name="node_type" type="String">
</argument>
<description>
- Returns all the [Color]s as a [PackedStringArray] filled with each [Color]'s name, for use in [method get_color], if the theme has [code]type[/code].
+ Returns all the [Color]s as a [PackedStringArray] filled with each [Color]'s name, for use in [method get_color], if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_constant" qualifiers="const">
@@ -114,19 +114,19 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns the constant at [code]name[/code] if the theme has [code]type[/code].
+ Returns the constant at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_constant_list" qualifiers="const">
<return type="PackedStringArray">
</return>
- <argument index="0" name="type" type="String">
+ <argument index="0" name="node_type" type="String">
</argument>
<description>
- Returns all the constants as a [PackedStringArray] filled with each constant's name, for use in [method get_constant], if the theme has [code]type[/code].
+ Returns all the constants as a [PackedStringArray] filled with each constant's name, for use in [method get_constant], if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_font" qualifiers="const">
@@ -134,19 +134,19 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns the [Font] at [code]name[/code] if the theme has [code]type[/code].
+ Returns the [Font] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_font_list" qualifiers="const">
<return type="PackedStringArray">
</return>
- <argument index="0" name="type" type="String">
+ <argument index="0" name="node_type" type="String">
</argument>
<description>
- Returns all the [Font]s as a [PackedStringArray] filled with each [Font]'s name, for use in [method get_font], if the theme has [code]type[/code].
+ Returns all the [Font]s as a [PackedStringArray] filled with each [Font]'s name, for use in [method get_font], if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_icon" qualifiers="const">
@@ -154,19 +154,19 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns the icon [Texture2D] at [code]name[/code] if the theme has [code]type[/code].
+ Returns the icon [Texture2D] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_icon_list" qualifiers="const">
<return type="PackedStringArray">
</return>
- <argument index="0" name="type" type="String">
+ <argument index="0" name="node_type" type="String">
</argument>
<description>
- Returns all the icons as a [PackedStringArray] filled with each [Texture2D]'s name, for use in [method get_icon], if the theme has [code]type[/code].
+ Returns all the icons as a [PackedStringArray] filled with each [Texture2D]'s name, for use in [method get_icon], if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_stylebox" qualifiers="const">
@@ -174,35 +174,35 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns the icon [StyleBox] at [code]name[/code] if the theme has [code]type[/code].
+ Returns the icon [StyleBox] at [code]name[/code] if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_stylebox_list" qualifiers="const">
<return type="PackedStringArray">
</return>
- <argument index="0" name="type" type="String">
+ <argument index="0" name="node_type" type="String">
</argument>
<description>
- Returns all the [StyleBox]s as a [PackedStringArray] filled with each [StyleBox]'s name, for use in [method get_stylebox], if the theme has [code]type[/code].
+ Returns all the [StyleBox]s as a [PackedStringArray] filled with each [StyleBox]'s name, for use in [method get_stylebox], if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_stylebox_types" qualifiers="const">
<return type="PackedStringArray">
</return>
<description>
- Returns all the [StyleBox] types as a [PackedStringArray] filled with each [StyleBox]'s type, for use in [method get_stylebox] and/or [method get_stylebox_list], if the theme has [code]type[/code].
+ Returns all the [StyleBox] types as a [PackedStringArray] filled with each [StyleBox]'s type, for use in [method get_stylebox] and/or [method get_stylebox_list], if the theme has [code]node_type[/code].
</description>
</method>
<method name="get_type_list" qualifiers="const">
<return type="PackedStringArray">
</return>
- <argument index="0" name="type" type="String">
+ <argument index="0" name="node_type" type="String">
</argument>
<description>
- Returns all the types in [code]type[/code] as a [PackedStringArray] for use in any of the [code]get_*[/code] functions, if the theme has [code]type[/code].
+ Returns all the types in [code]node_type[/code] as a [PackedStringArray] for use in any of the [code]get_*[/code] functions, if the theme has [code]node_type[/code].
</description>
</method>
<method name="has_color" qualifiers="const">
@@ -210,11 +210,11 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns [code]true[/code] if [Color] with [code]name[/code] is in [code]type[/code].
- Returns [code]false[/code] if the theme does not have [code]type[/code].
+ Returns [code]true[/code] if [Color] with [code]name[/code] is in [code]node_type[/code].
+ Returns [code]false[/code] if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="has_constant" qualifiers="const">
@@ -222,11 +222,11 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns [code]true[/code] if constant with [code]name[/code] is in [code]type[/code].
- Returns [code]false[/code] if the theme does not have [code]type[/code].
+ Returns [code]true[/code] if constant with [code]name[/code] is in [code]node_type[/code].
+ Returns [code]false[/code] if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="has_font" qualifiers="const">
@@ -234,11 +234,11 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns [code]true[/code] if [Font] with [code]name[/code] is in [code]type[/code].
- Returns [code]false[/code] if the theme does not have [code]type[/code].
+ Returns [code]true[/code] if [Font] with [code]name[/code] is in [code]node_type[/code].
+ Returns [code]false[/code] if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="has_icon" qualifiers="const">
@@ -246,11 +246,11 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns [code]true[/code] if icon [Texture2D] with [code]name[/code] is in [code]type[/code].
- Returns [code]false[/code] if the theme does not have [code]type[/code].
+ Returns [code]true[/code] if icon [Texture2D] with [code]name[/code] is in [code]node_type[/code].
+ Returns [code]false[/code] if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="has_stylebox" qualifiers="const">
@@ -258,11 +258,11 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<description>
- Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in [code]type[/code].
- Returns [code]false[/code] if the theme does not have [code]type[/code].
+ Returns [code]true[/code] if [StyleBox] with [code]name[/code] is in [code]node_type[/code].
+ Returns [code]false[/code] if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="set_color">
@@ -270,13 +270,13 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<argument index="2" name="color" type="Color">
</argument>
<description>
- Sets the theme's [Color] to [code]color[/code] at [code]name[/code] in [code]type[/code].
- Does nothing if the theme does not have [code]type[/code].
+ Sets the theme's [Color] to [code]color[/code] at [code]name[/code] in [code]node_type[/code].
+ Does nothing if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="set_constant">
@@ -284,13 +284,13 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<argument index="2" name="constant" type="int">
</argument>
<description>
- Sets the theme's constant to [code]constant[/code] at [code]name[/code] in [code]type[/code].
- Does nothing if the theme does not have [code]type[/code].
+ Sets the theme's constant to [code]constant[/code] at [code]name[/code] in [code]node_type[/code].
+ Does nothing if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="set_font">
@@ -298,13 +298,13 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<argument index="2" name="font" type="Font">
</argument>
<description>
- Sets the theme's [Font] to [code]font[/code] at [code]name[/code] in [code]type[/code].
- Does nothing if the theme does not have [code]type[/code].
+ Sets the theme's [Font] to [code]font[/code] at [code]name[/code] in [code]node_type[/code].
+ Does nothing if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="set_icon">
@@ -312,13 +312,13 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<argument index="2" name="texture" type="Texture2D">
</argument>
<description>
- Sets the theme's icon [Texture2D] to [code]texture[/code] at [code]name[/code] in [code]type[/code].
- Does nothing if the theme does not have [code]type[/code].
+ Sets the theme's icon [Texture2D] to [code]texture[/code] at [code]name[/code] in [code]node_type[/code].
+ Does nothing if the theme does not have [code]node_type[/code].
</description>
</method>
<method name="set_stylebox">
@@ -326,13 +326,13 @@
</return>
<argument index="0" name="name" type="StringName">
</argument>
- <argument index="1" name="type" type="StringName">
+ <argument index="1" name="node_type" type="StringName">
</argument>
<argument index="2" name="texture" type="StyleBox">
</argument>
<description>
- Sets theme's [StyleBox] to [code]stylebox[/code] at [code]name[/code] in [code]type[/code].
- Does nothing if the theme does not have [code]type[/code].
+ Sets theme's [StyleBox] to [code]stylebox[/code] at [code]name[/code] in [code]node_type[/code].
+ Does nothing if the theme does not have [code]node_type[/code].
</description>
</method>
</methods>
diff --git a/doc/classes/Tree.xml b/doc/classes/Tree.xml
index 0b2fb80480..73575b4309 100644
--- a/doc/classes/Tree.xml
+++ b/doc/classes/Tree.xml
@@ -106,14 +106,21 @@
<return type="TreeItem">
</return>
<description>
- Returns the currently edited item. This is only available for custom cell mode.
+ Returns the currently edited item. Can be used with [signal item_edited] to get the item that was modified.
+ [codeblock]
+ func _ready():
+ $Tree.item_edited.connect(on_Tree_item_edited)
+
+ func on_Tree_item_edited():
+ print($Tree.get_edited()) # This item just got edited (e.g. checked).
+ [/codeblock]
</description>
</method>
<method name="get_edited_column" qualifiers="const">
<return type="int">
</return>
<description>
- Returns the column for the currently edited item. This is only available for custom cell mode.
+ Returns the column for the currently edited item.
</description>
</method>
<method name="get_item_area_rect" qualifiers="const">
diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml
index b0bfd7f418..25033cdb09 100644
--- a/doc/classes/World2D.xml
+++ b/doc/classes/World2D.xml
@@ -16,7 +16,7 @@
The [RID] of this world's canvas resource. Used by the [RenderingServer] for 2D drawing.
</member>
<member name="direct_space_state" type="PhysicsDirectSpaceState2D" setter="" getter="get_direct_space_state">
- Direct access to the world's physics 2D space state. Used for querying current and potential collisions. Must only be accessed from the main thread within [code]_physics_process(delta)[/code].
+ Direct access to the world's physics 2D space state. Used for querying current and potential collisions. When using multi-threaded physics, access is limited to [code]_physics_process(delta)[/code] in the main thread.
</member>
<member name="space" type="RID" setter="" getter="get_space">
The [RID] of this world's physics space resource. Used by the [PhysicsServer2D] for 2D physics, treating it as both a space and an area.
diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml
index d804485d4e..fe92077432 100644
--- a/doc/classes/World3D.xml
+++ b/doc/classes/World3D.xml
@@ -15,7 +15,7 @@
<member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects">
</member>
<member name="direct_space_state" type="PhysicsDirectSpaceState3D" setter="" getter="get_direct_space_state">
- Direct access to the world's physics 3D space state. Used for querying current and potential collisions. Must only be accessed from within [code]_physics_process(delta)[/code].
+ Direct access to the world's physics 3D space state. Used for querying current and potential collisions.
</member>
<member name="environment" type="Environment" setter="set_environment" getter="get_environment">
The World3D's [Environment].
diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h
index 2d1c4f8d85..fd9c26bdb9 100644
--- a/drivers/dummy/rasterizer_dummy.h
+++ b/drivers/dummy/rasterizer_dummy.h
@@ -262,7 +262,6 @@ public:
#if 0
RID texture_create() override {
-
DummyTexture *texture = memnew(DummyTexture);
ERR_FAIL_COND_V(!texture, RID());
return texture_owner.make_rid(texture);
@@ -709,14 +708,11 @@ public:
/* LIGHTMAP CAPTURE */
#if 0
struct Instantiable {
-
SelfList<RasterizerScene::InstanceBase>::List instance_list;
_FORCE_INLINE_ void instance_change_notify(bool p_aabb = true, bool p_materials = true) override {
-
SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first();
while (instances) override {
-
//instances->self()->base_changed(p_aabb, p_materials);
instances = instances->next();
}
@@ -725,7 +721,6 @@ public:
_FORCE_INLINE_ void instance_remove_deps() override {
SelfList<RasterizerScene::InstanceBase> *instances = instance_list.first();
while (instances) override {
-
SelfList<RasterizerScene::InstanceBase> *next = instances->next();
//instances->self()->base_removed();
instances = next;
@@ -738,7 +733,6 @@ public:
};
struct LightmapCapture : public Instantiable {
-
Vector<LightmapCaptureOctree> octree;
AABB bounds;
Transform cell_xform;
diff --git a/drivers/png/png_driver_common.cpp b/drivers/png/png_driver_common.cpp
index d3e187c501..aed3fc9414 100644
--- a/drivers/png/png_driver_common.cpp
+++ b/drivers/png/png_driver_common.cpp
@@ -203,5 +203,4 @@ Error image_to_png(const Ref<Image> &p_image, Vector<uint8_t> &p_buffer) {
return OK;
}
-
} // namespace PNGDriverCommon
diff --git a/drivers/png/png_driver_common.h b/drivers/png/png_driver_common.h
index e7ec9b96bd..e47996193f 100644
--- a/drivers/png/png_driver_common.h
+++ b/drivers/png/png_driver_common.h
@@ -41,7 +41,6 @@ Error png_to_image(const uint8_t *p_source, size_t p_size, bool p_force_linear,
// Append p_image, as a png, to p_buffer.
// Contents of p_buffer is unspecified if error returned.
Error image_to_png(const Ref<Image> &p_image, Vector<uint8_t> &p_buffer);
-
} // namespace PNGDriverCommon
#endif
diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp
index 902876616b..0a42450675 100644
--- a/drivers/vulkan/rendering_device_vulkan.cpp
+++ b/drivers/vulkan/rendering_device_vulkan.cpp
@@ -3733,13 +3733,11 @@ String RenderingDeviceVulkan::_shader_uniform_debug(RID p_shader, int p_set) {
}
#if 0
bool RenderingDeviceVulkan::_uniform_add_binding(Vector<Vector<VkDescriptorSetLayoutBinding> > &bindings, Vector<Vector<UniformInfo> > &uniform_infos, const glslang::TObjectReflection &reflection, RenderingDevice::ShaderStage p_stage, Shader::PushConstant &push_constant, String *r_error) {
-
VkDescriptorSetLayoutBinding layout_binding;
UniformInfo info;
switch (reflection.getType()->getBasicType()) {
case glslang::EbtSampler: {
-
//print_line("DEBUG: IsSampler");
if (reflection.getType()->getSampler().dim == glslang::EsdBuffer) {
//texture buffers
@@ -3837,13 +3835,10 @@ bool RenderingDeviceVulkan::_uniform_add_binding(Vector<Vector<VkDescriptorSetLa
} break;
/*case glslang::EbtReference: {
-
} break;*/
/*case glslang::EbtAtomicUint: {
-
} break;*/
default: {
-
if (reflection.getType()->getQualifier().hasOffset() || reflection.name.find(".") != std::string::npos) {
//member of uniform block?
return true;
@@ -6837,7 +6832,6 @@ void RenderingDeviceVulkan::full_barrier() {
#if 0
void RenderingDeviceVulkan::draw_list_render_secondary_to_framebuffer(ID p_framebuffer, ID *p_draw_lists, uint32_t p_draw_list_count, InitialAction p_initial_action, FinalAction p_final_action, const Vector<Variant> &p_clear_colors) {
-
VkCommandBuffer frame_cmdbuf = frames[frame].frame_buffer;
ERR_FAIL_COND(!frame_cmdbuf);
@@ -6866,7 +6860,6 @@ void RenderingDeviceVulkan::draw_list_render_secondary_to_framebuffer(ID p_frame
ID screen_format = screen_get_framebuffer_format();
{
-
VkCommandBuffer *command_buffers = (VkCommandBuffer *)alloca(sizeof(VkCommandBuffer) * p_draw_list_count);
uint32_t command_buffer_count = 0;
@@ -6890,7 +6883,6 @@ void RenderingDeviceVulkan::draw_list_render_secondary_to_framebuffer(ID p_frame
}
vkCmdEndRenderPass(frame_cmdbuf);
-
}
#endif
diff --git a/drivers/vulkan/vulkan_context.cpp b/drivers/vulkan/vulkan_context.cpp
index 28634d5e70..ecf9dac61b 100644
--- a/drivers/vulkan/vulkan_context.cpp
+++ b/drivers/vulkan/vulkan_context.cpp
@@ -302,7 +302,7 @@ Error VulkanContext::_create_physical_device() {
/*flags*/ 0,
/*pApplicationInfo*/ &app,
/*enabledLayerCount*/ enabled_layer_count,
- /*ppEnabledLayerNames*/ (const char *const *)instance_validation_layers,
+ /*ppEnabledLayerNames*/ (const char *const *)enabled_layers,
/*enabledExtensionCount*/ enabled_extension_count,
/*ppEnabledExtensionNames*/ (const char *const *)extension_names,
};
@@ -1010,7 +1010,6 @@ Error VulkanContext::_update_swap_chain(Window *window) {
{
const VkAttachmentDescription attachment = {
-
/*flags*/ 0,
/*format*/ format,
/*samples*/ VK_SAMPLE_COUNT_1_BIT,
diff --git a/drivers/vulkan/vulkan_context.h b/drivers/vulkan/vulkan_context.h
index 26d4b76e86..62b97a7e60 100644
--- a/drivers/vulkan/vulkan_context.h
+++ b/drivers/vulkan/vulkan_context.h
@@ -120,7 +120,6 @@ class VulkanContext {
uint32_t enabled_extension_count = 0;
const char *extension_names[MAX_EXTENSIONS];
- const char **instance_validation_layers = nullptr;
uint32_t enabled_layer_count = 0;
const char *enabled_layers[MAX_LAYERS];
diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp
index b461ac4f35..276df45972 100644
--- a/editor/debugger/editor_debugger_node.cpp
+++ b/editor/debugger/editor_debugger_node.cpp
@@ -232,6 +232,9 @@ void EditorDebuggerNode::_notification(int p_what) {
tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox("DebuggerPanel", "EditorStyles"));
}
} break;
+ case NOTIFICATION_READY: {
+ _update_debug_options();
+ } break;
default:
break;
}
@@ -385,7 +388,7 @@ void EditorDebuggerNode::set_script_debug_button(MenuButton *p_button) {
p->add_shortcut(ED_GET_SHORTCUT("debugger/break"), DEBUG_BREAK);
p->add_shortcut(ED_GET_SHORTCUT("debugger/continue"), DEBUG_CONTINUE);
p->add_separator();
- p->add_check_shortcut(ED_GET_SHORTCUT("debugger/keep_debugger_open"), DEBUG_SHOW_KEEP_OPEN);
+ p->add_check_shortcut(ED_GET_SHORTCUT("debugger/keep_debugger_open"), DEBUG_KEEP_DEBUGGER_OPEN);
p->add_check_shortcut(ED_GET_SHORTCUT("debugger/debug_with_external_editor"), DEBUG_WITH_EXTERNAL_EDITOR);
p->connect("id_pressed", callable_mp(this, &EditorDebuggerNode::_menu_option));
@@ -425,20 +428,33 @@ void EditorDebuggerNode::_menu_option(int p_id) {
case DEBUG_CONTINUE: {
debug_continue();
} break;
-
- case DEBUG_SHOW_KEEP_OPEN: {
- bool visible = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN));
- hide_on_stop = visible;
- script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_SHOW_KEEP_OPEN), !visible);
+ case DEBUG_KEEP_DEBUGGER_OPEN: {
+ bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN));
+ hide_on_stop = ischecked;
+ script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_KEEP_DEBUGGER_OPEN), !ischecked);
+ EditorSettings::get_singleton()->set_project_metadata("debug_options", "keep_debugger_open", !ischecked);
} break;
case DEBUG_WITH_EXTERNAL_EDITOR: {
- bool checked = !script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR));
- debug_with_external_editor = checked;
- script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), checked);
+ bool ischecked = script_menu->get_popup()->is_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR));
+ debug_with_external_editor = !ischecked;
+ script_menu->get_popup()->set_item_checked(script_menu->get_popup()->get_item_index(DEBUG_WITH_EXTERNAL_EDITOR), !ischecked);
+ EditorSettings::get_singleton()->set_project_metadata("debug_options", "debug_with_external_editor", !ischecked);
} break;
}
}
+void EditorDebuggerNode::_update_debug_options() {
+ bool keep_debugger_open = EditorSettings::get_singleton()->get_project_metadata("debug_options", "keep_debugger_open", false);
+ bool debug_with_external_editor = EditorSettings::get_singleton()->get_project_metadata("debug_options", "debug_with_external_editor", false);
+
+ if (keep_debugger_open) {
+ _menu_option(DEBUG_KEEP_DEBUGGER_OPEN);
+ }
+ if (debug_with_external_editor) {
+ _menu_option(DEBUG_WITH_EXTERNAL_EDITOR);
+ }
+}
+
void EditorDebuggerNode::_paused() {
const bool paused = EditorNode::get_singleton()->get_pause_button()->is_pressed();
_for_all(tabs, [&](ScriptEditorDebugger *dbg) {
diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h
index 8d70a7f961..0f3be4d2dd 100644
--- a/editor/debugger/editor_debugger_node.h
+++ b/editor/debugger/editor_debugger_node.h
@@ -60,7 +60,7 @@ private:
DEBUG_STEP,
DEBUG_BREAK,
DEBUG_CONTINUE,
- DEBUG_SHOW_KEEP_OPEN,
+ DEBUG_KEEP_DEBUGGER_OPEN,
DEBUG_WITH_EXTERNAL_EDITOR,
};
@@ -133,6 +133,7 @@ protected:
void _paused();
void _break_state_changed();
void _menu_option(int p_id);
+ void _update_debug_options();
protected:
void _notification(int p_what);
diff --git a/editor/debugger/editor_visual_profiler.cpp b/editor/debugger/editor_visual_profiler.cpp
index 81b42da08e..baeb06794a 100644
--- a/editor/debugger/editor_visual_profiler.cpp
+++ b/editor/debugger/editor_visual_profiler.cpp
@@ -476,7 +476,6 @@ void EditorVisualProfiler::_graph_tex_draw() {
/*
if (hover_metric != -1 && frame_metrics[hover_metric].valid) {
-
int max_frames = frame_metrics.size();
int frame = frame_metrics[hover_metric].frame_number - (frame_metrics[last_metric].frame_number - max_frames + 1);
if (frame < 0)
@@ -671,7 +670,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const {
const Vector<EditorFrameProfiler::Metric::Category> &categories = frame_metrics[0].categories;
for (int j = 0; j < categories.size(); j++) {
-
const EditorFrameProfiler::Metric::Category &c = categories[j];
signatures.push_back(c.signature);
@@ -688,7 +686,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const {
int index = last_metric;
for (int i = 0; i < frame_metrics.size(); i++) {
-
++index;
if (index >= frame_metrics.size()) {
@@ -702,7 +699,6 @@ Vector<Vector<String>> EditorVisualProfiler::get_data_as_csv() const {
const Vector<EditorFrameProfiler::Metric::Category> &frame_cat = frame_metrics[index].categories;
for (int j = 0; j < frame_cat.size(); j++) {
-
const EditorFrameProfiler::Metric::Category &c = frame_cat[j];
values.write[it++] = String::num_real(c.total_time);
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index 248073c5a2..fd33115cda 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -487,8 +487,11 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
error->set_text_align(0, TreeItem::ALIGN_LEFT);
String error_title;
- // Include method name, when given, in error title.
- if (!oe.source_func.empty()) {
+ if (oe.callstack.size() > 0) {
+ // If available, use the script's stack in the error title.
+ error_title = oe.callstack[oe.callstack.size() - 1].func + ": ";
+ } else if (!oe.source_func.empty()) {
+ // Otherwise try to use the C++ source function.
error_title += oe.source_func + ": ";
}
// If we have a (custom) error message, use it as title, and add a C++ Error
@@ -529,9 +532,6 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
cpp_source->set_metadata(0, source_meta);
}
- error->set_tooltip(0, tooltip);
- error->set_tooltip(1, tooltip);
-
// Format stack trace.
// stack_items_count is the number of elements to parse, with 3 items per frame
// of the stack trace (script, method, line).
@@ -548,10 +548,17 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
stack_trace->set_text(0, "<" + TTR("Stack Trace") + ">");
stack_trace->set_text_align(0, TreeItem::ALIGN_LEFT);
error->set_metadata(0, meta);
+ tooltip += TTR("Stack Trace:") + "\n";
}
- stack_trace->set_text(1, infos[i].file.get_file() + ":" + itos(infos[i].line) + " @ " + infos[i].func + "()");
+
+ String frame_txt = infos[i].file.get_file() + ":" + itos(infos[i].line) + " @ " + infos[i].func + "()";
+ tooltip += frame_txt + "\n";
+ stack_trace->set_text(1, frame_txt);
}
+ error->set_tooltip(0, tooltip);
+ error->set_tooltip(1, tooltip);
+
if (oe.warning) {
warning_count++;
} else {
diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp
index 5e87f866d8..527286583e 100644
--- a/editor/dependency_editor.cpp
+++ b/editor/dependency_editor.cpp
@@ -450,13 +450,13 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<
removed_deps.sort();
if (removed_deps.empty()) {
owners->hide();
- text->set_text(TTR("Remove selected files from the project? (Can't be restored)"));
+ text->set_text(TTR("Remove selected files from the project? (no undo)\nYou can find the removed files in the system trash to restore them."));
set_size(Size2());
popup_centered();
} else {
_build_removed_dependency_tree(removed_deps);
owners->show();
- text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)"));
+ text->set_text(TTR("The files being removed are required by other resources in order for them to work.\nRemove them anyway? (no undo)\nYou can find the removed files in the system trash to restore them."));
popup_centered(Size2(500, 350));
}
EditorFileSystem::get_singleton()->scan_changes();
diff --git a/editor/editor_data.h b/editor/editor_data.h
index 5037a6acb4..eec95554be 100644
--- a/editor/editor_data.h
+++ b/editor/editor_data.h
@@ -40,7 +40,6 @@
class EditorHistory {
enum {
-
HISTORY_MAX = 64
};
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index 97800fe961..3aeffede82 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -737,6 +737,9 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> &
_edit_filter_list(paths, p_preset->get_include_filter(), false);
_edit_filter_list(paths, p_preset->get_exclude_filter(), true);
+ // Ignore import files, since these are automatically added to the jar later with the resources
+ _edit_filter_list(paths, String("*.import"), true);
+
// Get encryption filters.
bool enc_pck = p_preset->get_enc_pck();
Vector<String> enc_in_filters;
diff --git a/editor/editor_help.h b/editor/editor_help.h
index 7c3edeb299..b69b6d7401 100644
--- a/editor/editor_help.h
+++ b/editor/editor_help.h
@@ -91,7 +91,6 @@ class EditorHelp : public VBoxContainer {
GDCLASS(EditorHelp, VBoxContainer);
enum Page {
-
PAGE_CLASS_LIST,
PAGE_CLASS_DESC,
PAGE_CLASS_PREV,
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index c6613cdf63..976afd8e8e 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -760,15 +760,18 @@ void EditorNode::_fs_changed() {
preset_name);
} else {
Ref<EditorExportPlatform> platform = preset->get_platform();
- if (platform.is_null()) {
+ const String export_path = export_defer.path.empty() ? preset->get_export_path() : export_defer.path;
+ if (export_path.empty()) {
+ export_error = vformat("Export preset '%s' doesn't have a default export path, and none was specified.", preset_name);
+ } else if (platform.is_null()) {
export_error = vformat("Export preset '%s' doesn't have a matching platform.", preset_name);
} else {
Error err = OK;
if (export_defer.pack_only) { // Only export .pck or .zip data pack.
- if (export_defer.path.ends_with(".zip")) {
- err = platform->export_zip(preset, export_defer.debug, export_defer.path);
- } else if (export_defer.path.ends_with(".pck")) {
- err = platform->export_pack(preset, export_defer.debug, export_defer.path);
+ if (export_path.ends_with(".zip")) {
+ err = platform->export_zip(preset, export_defer.debug, export_path);
+ } else if (export_path.ends_with(".pck")) {
+ err = platform->export_pack(preset, export_defer.debug, export_path);
}
} else { // Normal project export.
String config_error;
@@ -777,7 +780,7 @@ void EditorNode::_fs_changed() {
ERR_PRINT(vformat("Cannot export project with preset '%s' due to configuration errors:\n%s", preset_name, config_error));
err = missing_templates ? ERR_FILE_NOT_FOUND : ERR_UNCONFIGURED;
} else {
- err = platform->export_project(preset, export_defer.debug, export_defer.path);
+ err = platform->export_project(preset, export_defer.debug, export_path);
}
}
switch (err) {
@@ -787,7 +790,7 @@ void EditorNode::_fs_changed() {
export_error = vformat("Project export failed for preset '%s', the export template appears to be missing.", preset_name);
break;
case ERR_FILE_BAD_PATH:
- export_error = vformat("Project export failed for preset '%s', the target path '%s' appears to be invalid.", preset_name, export_defer.path);
+ export_error = vformat("Project export failed for preset '%s', the target path '%s' appears to be invalid.", preset_name, export_path);
break;
default:
export_error = vformat("Project export failed with error code %d for preset '%s'.", (int)err, preset_name);
@@ -1679,7 +1682,7 @@ void EditorNode::_dialog_action(String p_file) {
if (err == ERR_FILE_CANT_OPEN || err == ERR_FILE_NOT_FOUND) {
config.instance(); // new config
} else if (err != OK) {
- show_warning(TTR("Error trying to save layout!"));
+ show_warning(TTR("An error occurred while trying to save the editor layout.\nMake sure the editor's user data path is writable."));
return;
}
@@ -1691,7 +1694,7 @@ void EditorNode::_dialog_action(String p_file) {
_update_layouts_menu();
if (p_file == "Default") {
- show_warning(TTR("Default editor layout overridden."));
+ show_warning(TTR("Default editor layout overridden.\nTo restore the Default layout to its base settings, use the Delete Layout option and delete the Default layout."));
}
} break;
@@ -1722,7 +1725,7 @@ void EditorNode::_dialog_action(String p_file) {
_update_layouts_menu();
if (p_file == "Default") {
- show_warning(TTR("Restored default layout to base settings."));
+ show_warning(TTR("Restored the Default layout to its base settings."));
}
} break;
@@ -5565,46 +5568,51 @@ EditorNode::EditorNode() {
{
int display_scale = EditorSettings::get_singleton()->get("interface/editor/display_scale");
- float custom_display_scale = EditorSettings::get_singleton()->get("interface/editor/custom_display_scale");
switch (display_scale) {
case 0: {
- // Try applying a suitable display scale automatically
+ // Try applying a suitable display scale automatically.
#ifdef OSX_ENABLED
editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale());
#else
const int screen = DisplayServer::get_singleton()->window_get_current_screen();
- editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0);
+ float scale;
+ if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) {
+ // hiDPI display.
+ scale = 2.0;
+ } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) {
+ // Small loDPI display. Use a smaller display scale so that editor elements fit more easily.
+ // Icons won't look great, but this is better than having editor elements overflow from its window.
+ scale = 0.75;
+ } else {
+ scale = 1.0;
+ }
+
+ editor_set_scale(scale);
#endif
} break;
- case 1: {
+ case 1:
editor_set_scale(0.75);
- } break;
-
- case 2: {
+ break;
+ case 2:
editor_set_scale(1.0);
- } break;
-
- case 3: {
+ break;
+ case 3:
editor_set_scale(1.25);
- } break;
-
- case 4: {
+ break;
+ case 4:
editor_set_scale(1.5);
- } break;
-
- case 5: {
+ break;
+ case 5:
editor_set_scale(1.75);
- } break;
-
- case 6: {
+ break;
+ case 6:
editor_set_scale(2.0);
- } break;
-
- default: {
- editor_set_scale(custom_display_scale);
- } break;
+ break;
+ default:
+ editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale"));
+ break;
}
}
@@ -6805,14 +6813,16 @@ EditorNode::EditorNode() {
ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_ALT | KEY_1);
ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_ALT | KEY_2);
ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_ALT | KEY_3);
+ ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_ALT | KEY_4);
ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_ALT | KEY_SPACE);
#else
- ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_F1);
- ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_F2);
- ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_F3); //hack needed for script editor F3 search to work :) Assign like this or don't use F3
+ // Use the Ctrl modifier so F2 can be used to rename nodes in the scene tree dock.
+ ED_SHORTCUT("editor/editor_2d", TTR("Open 2D Editor"), KEY_MASK_CTRL | KEY_F1);
+ ED_SHORTCUT("editor/editor_3d", TTR("Open 3D Editor"), KEY_MASK_CTRL | KEY_F2);
+ ED_SHORTCUT("editor/editor_script", TTR("Open Script Editor"), KEY_MASK_CTRL | KEY_F3);
+ ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"), KEY_MASK_CTRL | KEY_F4);
ED_SHORTCUT("editor/editor_help", TTR("Search Help"), KEY_MASK_SHIFT | KEY_F1);
#endif
- ED_SHORTCUT("editor/editor_assetlib", TTR("Open Asset Library"));
ED_SHORTCUT("editor/editor_next", TTR("Open the next Editor"));
ED_SHORTCUT("editor/editor_prev", TTR("Open the previous Editor"));
diff --git a/editor/editor_properties.h b/editor/editor_properties.h
index be3e9db8ed..828b639527 100644
--- a/editor/editor_properties.h
+++ b/editor/editor_properties.h
@@ -595,7 +595,6 @@ class EditorPropertyResource : public EditorProperty {
GDCLASS(EditorPropertyResource, EditorProperty);
enum MenuOption {
-
OBJ_MENU_LOAD = 0,
OBJ_MENU_EDIT = 1,
OBJ_MENU_CLEAR = 2,
diff --git a/editor/editor_run.h b/editor/editor_run.h
index a15d65d91b..08b1e74ed1 100644
--- a/editor/editor_run.h
+++ b/editor/editor_run.h
@@ -36,7 +36,6 @@
class EditorRun {
public:
enum Status {
-
STATUS_PLAY,
STATUS_PAUSED,
STATUS_STOP
diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp
index 79525ced51..768e5bccbc 100644
--- a/editor/editor_themes.cpp
+++ b/editor/editor_themes.cpp
@@ -441,7 +441,8 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
// Highlighted tabs and border width
Color tab_color = highlight_tabs ? base_color.lerp(font_color, contrast) : base_color;
- const int border_width = CLAMP(border_size, 0, 3) * EDSCALE;
+ // Ensure borders are visible when using an editor scale below 100%.
+ const int border_width = CLAMP(border_size, 0, 3) * MAX(1, EDSCALE);
const int default_margin_size = 4;
const int margin_size_extra = default_margin_size + CLAMP(border_size, 0, 3);
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index ee0ee91893..543546b152 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -2363,7 +2363,7 @@ void FileSystemDock::_file_and_folders_fill_popup(PopupMenu *p_popup, Vector<Str
if (p_paths.size() > 1 || p_paths[0] != "res://") {
p_popup->add_icon_item(get_theme_icon("MoveUp", "EditorIcons"), TTR("Move To..."), FILE_MOVE);
- p_popup->add_icon_item(get_theme_icon("Remove", "EditorIcons"), TTR("Delete"), FILE_REMOVE);
+ p_popup->add_icon_item(get_theme_icon("Remove", "EditorIcons"), TTR("Move to Trash"), FILE_REMOVE);
}
if (p_paths.size() == 1) {
diff --git a/editor/import/collada.h b/editor/import/collada.h
index aa0d42035f..2f6db93dbc 100644
--- a/editor/import/collada.h
+++ b/editor/import/collada.h
@@ -313,7 +313,6 @@ public:
struct Node {
enum Type {
-
TYPE_NODE,
TYPE_JOINT,
TYPE_SKELETON, //this bone is not collada, it's added afterwards as optimization
diff --git a/editor/import/editor_scene_importer_gltf.cpp b/editor/import/editor_scene_importer_gltf.cpp
index 266df78949..0c860a8965 100644
--- a/editor/import/editor_scene_importer_gltf.cpp
+++ b/editor/import/editor_scene_importer_gltf.cpp
@@ -1304,12 +1304,14 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b
String uri = d["uri"];
if (uri.begins_with("data:")) { // Embedded data using base64.
- // Validate data MIME types and throw an error if it's one we don't know/support.
+ // Validate data MIME types and throw a warning if it's one we don't know/support.
if (!uri.begins_with("data:application/octet-stream;base64") &&
!uri.begins_with("data:application/gltf-buffer;base64") &&
!uri.begins_with("data:image/png;base64") &&
!uri.begins_with("data:image/jpeg;base64")) {
- ERR_PRINT("glTF: Got image data with an unknown URI data type: " + uri);
+ WARN_PRINT(vformat("glTF: Image index '%d' uses an unsupported URI data type: %s. Skipping it.", i, uri));
+ state.images.push_back(Ref<Texture2D>()); // Placeholder to keep count.
+ continue;
}
data = _parse_base64_uri(uri);
data_ptr = data.ptr();
@@ -1344,7 +1346,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b
}
} else if (d.has("bufferView")) {
// Handles the third bullet point from the spec (bufferView).
- ERR_FAIL_COND_V_MSG(mimetype.empty(), ERR_FILE_CORRUPT, "glTF: Image specifies 'bufferView' but no 'mimeType', which is invalid.");
+ ERR_FAIL_COND_V_MSG(mimetype.empty(), ERR_FILE_CORRUPT,
+ vformat("glTF: Image index '%d' specifies 'bufferView' but no 'mimeType', which is invalid.", i));
const GLTFBufferViewIndex bvi = d["bufferView"];
@@ -1381,7 +1384,8 @@ Error EditorSceneImporterGLTF::_parse_images(GLTFState &state, const String &p_b
}
}
- ERR_FAIL_COND_V_MSG(img.is_null(), ERR_FILE_CORRUPT, "glTF: Couldn't load image with its given mimetype: " + mimetype);
+ ERR_FAIL_COND_V_MSG(img.is_null(), ERR_FILE_CORRUPT,
+ vformat("glTF: Couldn't load image index '%d' with its given mimetype: %s.", i, mimetype));
Ref<ImageTexture> t;
t.instance();
diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp
index 3a0e624a8f..ac2485fe31 100644
--- a/editor/import/resource_importer_texture.cpp
+++ b/editor/import/resource_importer_texture.cpp
@@ -205,7 +205,7 @@ void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options,
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "mipmaps/generate"), (p_preset == PRESET_3D ? true : false)));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "mipmaps/limit", PROPERTY_HINT_RANGE, "-1,256"), -1));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "roughness/mode", PROPERTY_HINT_ENUM, "Detect,Disabled,Red,Green,Blue,Alpha,Gray"), 0));
- r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "roughness/src_normal", PROPERTY_HINT_FILE, "*.png,*.jpg"), ""));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "roughness/src_normal", PROPERTY_HINT_FILE, "*.bmp,*.dds,*.exr,*.jpeg,*.jpg,*.hdr,*.png,*.svg,*.svgz,*.tga,*.webp"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/fix_alpha_border"), p_preset != PRESET_3D));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/premult_alpha"), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "process/invert_color"), false));
diff --git a/editor/input_map_editor.cpp b/editor/input_map_editor.cpp
index c67e16d371..5b6d850096 100644
--- a/editor/input_map_editor.cpp
+++ b/editor/input_map_editor.cpp
@@ -35,37 +35,37 @@
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
-static const char *_button_descriptions[JOY_SDL_BUTTONS] = {
- TTRC("Face Bottom, DualShock Cross, Xbox A, Nintendo B"),
- TTRC("Face Right, DualShock Circle, Xbox B, Nintendo A"),
- TTRC("Face Left, DualShock Square, Xbox X, Nintendo Y"),
- TTRC("Face Top, DualShock Triangle, Xbox Y, Nintendo X"),
- TTRC("DualShock Select, Xbox Back, Nintendo -"),
- TTRC("Home, DualShock PS, Guide"),
+static const char *_button_descriptions[JOY_BUTTON_SDL_MAX] = {
+ TTRC("Bottom Action, Sony Cross, Xbox A, Nintendo B"),
+ TTRC("Right Action, Sony Circle, Xbox B, Nintendo A"),
+ TTRC("Left Action, Sony Square, Xbox X, Nintendo Y"),
+ TTRC("Top Action, Sony Triangle, Xbox Y, Nintendo X"),
+ TTRC("Back, Sony Select, Xbox Back, Nintendo -"),
+ TTRC("Guide, Sony PS, Xbox Home"),
TTRC("Start, Nintendo +"),
- TTRC("Left Stick, DualShock L3, Xbox L/LS"),
- TTRC("Right Stick, DualShock R3, Xbox R/RS"),
- TTRC("Left Shoulder, DualShock L1, Xbox LB"),
- TTRC("Right Shoulder, DualShock R1, Xbox RB"),
- TTRC("D-Pad Up"),
- TTRC("D-Pad Down"),
- TTRC("D-Pad Left"),
- TTRC("D-Pad Right")
+ TTRC("Left Stick, Sony L3, Xbox L/LS"),
+ TTRC("Right Stick, Sony R3, Xbox R/RS"),
+ TTRC("Left Shoulder, Sony L1, Xbox LB"),
+ TTRC("Right Shoulder, Sony R1, Xbox RB"),
+ TTRC("D-pad Up"),
+ TTRC("D-pad Down"),
+ TTRC("D-pad Left"),
+ TTRC("D-pad Right"),
};
static const char *_axis_descriptions[JOY_AXIS_MAX * 2] = {
- TTRC("Left Stick Left"),
- TTRC("Left Stick Right"),
- TTRC("Left Stick Up"),
- TTRC("Left Stick Down"),
- TTRC("Right Stick Left"),
- TTRC("Right Stick Right"),
- TTRC("Right Stick Up"),
- TTRC("Right Stick Down"),
+ TTRC("Left Stick Left, Joystick 0 Left"),
+ TTRC("Left Stick Right, Joystick 0 Right"),
+ TTRC("Left Stick Up, Joystick 0 Up"),
+ TTRC("Left Stick Down, Joystick 0 Down"),
+ TTRC("Right Stick Left, Joystick 1 Left"),
+ TTRC("Right Stick Right, Joystick 1 Right"),
+ TTRC("Right Stick Up, Joystick 1 Up"),
+ TTRC("Right Stick Down, Joystick 1 Down"),
TTRC("Joystick 2 Left"),
- TTRC("Joystick 2 Right, Left Trigger, L2, LT"),
+ TTRC("Left Trigger, L2, LT, Joystick 2 Right"),
TTRC("Joystick 2 Up"),
- TTRC("Joystick 2 Down, Right Trigger, R2, RT"),
+ TTRC("Right Trigger, R2, RT, Joystick 2 Down"),
TTRC("Joystick 3 Left"),
TTRC("Joystick 3 Right"),
TTRC("Joystick 3 Up"),
@@ -503,7 +503,7 @@ void InputMapEditor::_add_item(int p_item, Ref<InputEvent> p_exiting_event) {
device_index->clear();
for (int i = 0; i < JOY_BUTTON_MAX; i++) {
String desc = TTR("Button") + " " + itos(i);
- if (i < JOY_SDL_BUTTONS) {
+ if (i < JOY_BUTTON_SDL_MAX) {
desc += " (" + TTR(_button_descriptions[i]) + ")";
}
device_index->add_item(desc);
@@ -717,7 +717,7 @@ void InputMapEditor::_update_actions() {
const int idx = jb->get_button_index();
String str = _get_device_string(jb->get_device()) + ", " +
TTR("Button") + " " + itos(idx);
- if (idx >= 0 && idx < JOY_SDL_BUTTONS) {
+ if (idx >= 0 && idx < JOY_BUTTON_SDL_MAX) {
str += String() + " (" + TTR(_button_descriptions[jb->get_button_index()]) + ")";
}
diff --git a/editor/node_3d_editor_gizmos.cpp b/editor/node_3d_editor_gizmos.cpp
index 397a958d8f..b7f7d637d2 100644
--- a/editor/node_3d_editor_gizmos.cpp
+++ b/editor/node_3d_editor_gizmos.cpp
@@ -1716,14 +1716,12 @@ void Skeleton3DGizmoPlugin::redraw(EditorNode3DGizmo *p_gizmo) {
Vector3 face_points[4];
for (int j=0;j<4;j++) {
-
float v[3];
v[0]=1.0;
v[1]=1-2*((j>>1)&1);
v[2]=v[1]*(1-2*(j&1));
for (int k=0;k<3;k++) {
-
if (i<3)
face_points[j][(i+k)%3]=v[k]*(i>=3?-1:1);
else
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index e1f2d2c045..6acf80a2c1 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -1513,7 +1513,7 @@ bool CanvasItemEditor::_gui_input_rotate(const Ref<InputEvent> &p_event) {
// Start rotation
if (drag_type == DRAG_NONE) {
if (b.is_valid() && b->get_button_index() == BUTTON_LEFT && b->is_pressed()) {
- if ((b->get_control() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) {
+ if ((b->get_command() && !b->get_alt() && tool == TOOL_SELECT) || tool == TOOL_ROTATE) {
List<CanvasItem *> selection = _get_edited_canvas_items();
// Remove not movable nodes
@@ -3389,7 +3389,6 @@ void CanvasItemEditor::_draw_selection() {
if (canvas_item->_edit_use_rect()) {
Vector2 pre_drag_endpoints[4] = {
-
pre_drag_xform.xform(se->pre_drag_rect.position),
pre_drag_xform.xform(se->pre_drag_rect.position + Vector2(se->pre_drag_rect.size.x, 0)),
pre_drag_xform.xform(se->pre_drag_rect.position + se->pre_drag_rect.size),
diff --git a/editor/plugins/collision_polygon_3d_editor_plugin.h b/editor/plugins/collision_polygon_3d_editor_plugin.h
index 98f499031a..bb4ee2185e 100644
--- a/editor/plugins/collision_polygon_3d_editor_plugin.h
+++ b/editor/plugins/collision_polygon_3d_editor_plugin.h
@@ -44,7 +44,6 @@ class CollisionPolygon3DEditor : public HBoxContainer {
UndoRedo *undo_redo;
enum Mode {
-
MODE_CREATE,
MODE_EDIT,
diff --git a/editor/plugins/cpu_particles_3d_editor_plugin.h b/editor/plugins/cpu_particles_3d_editor_plugin.h
index 90300daf71..d6886a24dc 100644
--- a/editor/plugins/cpu_particles_3d_editor_plugin.h
+++ b/editor/plugins/cpu_particles_3d_editor_plugin.h
@@ -38,7 +38,6 @@ class CPUParticles3DEditor : public GPUParticles3DEditorBase {
GDCLASS(CPUParticles3DEditor, GPUParticles3DEditorBase);
enum Menu {
-
MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE,
MENU_OPTION_CLEAR_EMISSION_VOLUME,
MENU_OPTION_RESTART
diff --git a/editor/plugins/gpu_particles_2d_editor_plugin.h b/editor/plugins/gpu_particles_2d_editor_plugin.h
index 86e89bd0b0..f3ca20b71a 100644
--- a/editor/plugins/gpu_particles_2d_editor_plugin.h
+++ b/editor/plugins/gpu_particles_2d_editor_plugin.h
@@ -42,7 +42,6 @@ class GPUParticles2DEditorPlugin : public EditorPlugin {
GDCLASS(GPUParticles2DEditorPlugin, EditorPlugin);
enum {
-
MENU_GENERATE_VISIBILITY_RECT,
MENU_LOAD_EMISSION_MASK,
MENU_CLEAR_EMISSION_MASK,
diff --git a/editor/plugins/gpu_particles_3d_editor_plugin.h b/editor/plugins/gpu_particles_3d_editor_plugin.h
index 1665b3676a..ce376e4386 100644
--- a/editor/plugins/gpu_particles_3d_editor_plugin.h
+++ b/editor/plugins/gpu_particles_3d_editor_plugin.h
@@ -71,7 +71,6 @@ class GPUParticles3DEditor : public GPUParticles3DEditorBase {
GPUParticles3D *node;
enum Menu {
-
MENU_OPTION_GENERATE_AABB,
MENU_OPTION_CREATE_EMISSION_VOLUME_FROM_NODE,
MENU_OPTION_CLEAR_EMISSION_VOLUME,
diff --git a/editor/plugins/item_list_editor_plugin.h b/editor/plugins/item_list_editor_plugin.h
index 87586904a3..fa5e802869 100644
--- a/editor/plugins/item_list_editor_plugin.h
+++ b/editor/plugins/item_list_editor_plugin.h
@@ -49,7 +49,6 @@ protected:
public:
enum Flags {
-
FLAG_ICON = 1,
FLAG_CHECKABLE = 2,
FLAG_ID = 4,
diff --git a/editor/plugins/mesh_instance_3d_editor_plugin.h b/editor/plugins/mesh_instance_3d_editor_plugin.h
index 77a2b8ec34..f42136942b 100644
--- a/editor/plugins/mesh_instance_3d_editor_plugin.h
+++ b/editor/plugins/mesh_instance_3d_editor_plugin.h
@@ -40,7 +40,6 @@ class MeshInstance3DEditor : public Control {
GDCLASS(MeshInstance3DEditor, Control);
enum Menu {
-
MENU_OPTION_CREATE_STATIC_TRIMESH_BODY,
MENU_OPTION_CREATE_TRIMESH_COLLISION_SHAPE,
MENU_OPTION_CREATE_SINGLE_CONVEX_COLLISION_SHAPE,
diff --git a/editor/plugins/mesh_library_editor_plugin.h b/editor/plugins/mesh_library_editor_plugin.h
index ea13303740..fafbce9243 100644
--- a/editor/plugins/mesh_library_editor_plugin.h
+++ b/editor/plugins/mesh_library_editor_plugin.h
@@ -46,7 +46,6 @@ class MeshLibraryEditor : public Control {
int to_erase;
enum {
-
MENU_OPTION_ADD_ITEM,
MENU_OPTION_REMOVE_ITEM,
MENU_OPTION_UPDATE_FROM_SCENE,
diff --git a/editor/plugins/multimesh_editor_plugin.h b/editor/plugins/multimesh_editor_plugin.h
index d1f8a3b74a..6a80fd4d16 100644
--- a/editor/plugins/multimesh_editor_plugin.h
+++ b/editor/plugins/multimesh_editor_plugin.h
@@ -63,7 +63,6 @@ class MultiMeshEditor : public Control {
SpinBox *populate_amount;
enum Menu {
-
MENU_OPTION_POPULATE
};
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index 28acb26012..fa7300c930 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -5013,6 +5013,8 @@ void Node3DEditor::_menu_item_pressed(int p_option) {
}
}
}
+ _finish_grid();
+ _init_grid();
view_menu->get_popup()->set_item_checked(view_menu->get_popup()->get_item_index(p_option), grid_enabled);
diff --git a/editor/plugins/node_3d_editor_plugin.h b/editor/plugins/node_3d_editor_plugin.h
index 07f6d69d76..2e98fcad4c 100644
--- a/editor/plugins/node_3d_editor_plugin.h
+++ b/editor/plugins/node_3d_editor_plugin.h
@@ -180,7 +180,6 @@ class Node3DEditorViewport : public Control {
friend class Node3DEditor;
friend class ViewportRotationControl;
enum {
-
VIEW_TOP,
VIEW_BOTTOM,
VIEW_LEFT,
@@ -554,7 +553,6 @@ public:
static const unsigned int VIEWPORTS_COUNT = 4;
enum ToolMode {
-
TOOL_MODE_SELECT,
TOOL_MODE_MOVE,
TOOL_MODE_ROTATE,
@@ -568,7 +566,6 @@ public:
};
enum ToolOptions {
-
TOOL_OPT_LOCAL_COORDS,
TOOL_OPT_USE_SNAP,
TOOL_OPT_OVERRIDE_CAMERA,
@@ -634,7 +631,6 @@ private:
} gizmo;
enum MenuOption {
-
MENU_TOOL_SELECT,
MENU_TOOL_MOVE,
MENU_TOOL_ROTATE,
diff --git a/editor/plugins/path_2d_editor_plugin.h b/editor/plugins/path_2d_editor_plugin.h
index 6a7dffc7f8..8a420d7c8d 100644
--- a/editor/plugins/path_2d_editor_plugin.h
+++ b/editor/plugins/path_2d_editor_plugin.h
@@ -76,7 +76,6 @@ class Path2DEditor : public HBoxContainer {
};
enum Action {
-
ACTION_NONE,
ACTION_MOVING_POINT,
ACTION_MOVING_IN,
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index 29db284b44..0063bec9de 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -372,7 +372,6 @@ void ShaderEditor::_bind_methods() {
void ShaderEditor::ensure_select_current() {
/*
if (tab_container->get_child_count() && tab_container->get_current_tab()>=0) {
-
ShaderTextEditor *ste = Object::cast_to<ShaderTextEditor>(tab_container->get_child(tab_container->get_current_tab()));
if (!ste)
return;
diff --git a/editor/plugins/shader_editor_plugin.h b/editor/plugins/shader_editor_plugin.h
index 904aed186a..e81a782ac8 100644
--- a/editor/plugins/shader_editor_plugin.h
+++ b/editor/plugins/shader_editor_plugin.h
@@ -69,7 +69,6 @@ class ShaderEditor : public PanelContainer {
GDCLASS(ShaderEditor, PanelContainer);
enum {
-
EDIT_UNDO,
EDIT_REDO,
EDIT_CUT,
diff --git a/editor/plugins/tile_map_editor_plugin.h b/editor/plugins/tile_map_editor_plugin.h
index f57616db1f..848704e830 100644
--- a/editor/plugins/tile_map_editor_plugin.h
+++ b/editor/plugins/tile_map_editor_plugin.h
@@ -43,7 +43,6 @@ class TileMapEditor : public VBoxContainer {
GDCLASS(TileMapEditor, VBoxContainer);
enum Tool {
-
TOOL_NONE,
TOOL_PAINTING,
TOOL_ERASING,
@@ -58,7 +57,6 @@ class TileMapEditor : public VBoxContainer {
};
enum Options {
-
OPTION_COPY,
OPTION_ERASE_SELECTION,
OPTION_FIX_INVALID,
diff --git a/editor/plugins/tile_set_editor_plugin.cpp b/editor/plugins/tile_set_editor_plugin.cpp
index 9c589267fc..714f38bd56 100644
--- a/editor/plugins/tile_set_editor_plugin.cpp
+++ b/editor/plugins/tile_set_editor_plugin.cpp
@@ -500,6 +500,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) {
tools[SHAPE_NEW_RECTANGLE]->set_button_group(tg);
tools[SHAPE_NEW_RECTANGLE]->set_tooltip(TTR("Create a new rectangle."));
tools[SHAPE_NEW_RECTANGLE]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_NEW_RECTANGLE));
+ tools[SHAPE_NEW_RECTANGLE]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_new_rectangle", TTR("New Rectangle"), KEY_MASK_SHIFT | KEY_R));
tools[SHAPE_NEW_POLYGON] = memnew(Button);
toolbar->add_child(tools[SHAPE_NEW_POLYGON]);
@@ -508,6 +509,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) {
tools[SHAPE_NEW_POLYGON]->set_button_group(tg);
tools[SHAPE_NEW_POLYGON]->set_tooltip(TTR("Create a new polygon."));
tools[SHAPE_NEW_POLYGON]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_NEW_POLYGON));
+ tools[SHAPE_NEW_POLYGON]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_new_polygon", TTR("New Polygon"), KEY_MASK_SHIFT | KEY_P));
separator_shape_toggle = memnew(VSeparator);
toolbar->add_child(separator_shape_toggle);
@@ -521,6 +523,7 @@ TileSetEditor::TileSetEditor(EditorNode *p_editor) {
tools[SHAPE_DELETE] = memnew(Button);
tools[SHAPE_DELETE]->set_flat(true);
tools[SHAPE_DELETE]->connect("pressed", callable_mp(this, &TileSetEditor::_on_tool_clicked), varray(SHAPE_DELETE));
+ tools[SHAPE_DELETE]->set_shortcut(ED_SHORTCUT("tileset_editor/shape_delete", TTR("Delete Selected Shape"), KEY_MASK_SHIFT | KEY_BACKSPACE));
toolbar->add_child(tools[SHAPE_DELETE]);
spin_priority = memnew(SpinBox);
diff --git a/editor/plugins/version_control_editor_plugin.h b/editor/plugins/version_control_editor_plugin.h
index 248a1435fd..34643e85e4 100644
--- a/editor/plugins/version_control_editor_plugin.h
+++ b/editor/plugins/version_control_editor_plugin.h
@@ -43,7 +43,6 @@ class VersionControlEditorPlugin : public EditorPlugin {
public:
enum ChangeType {
-
CHANGE_TYPE_NEW = 0,
CHANGE_TYPE_MODIFIED = 1,
CHANGE_TYPE_RENAMED = 2,
diff --git a/editor/project_export.cpp b/editor/project_export.cpp
index e8c2b1f954..75509c7544 100644
--- a/editor/project_export.cpp
+++ b/editor/project_export.cpp
@@ -721,14 +721,19 @@ void ProjectExportDialog::_fill_resource_tree() {
}
bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem *p_item, Ref<EditorExportPreset> &current, bool p_only_scenes) {
+ p_item->set_cell_mode(0, TreeItem::CELL_MODE_CHECK);
p_item->set_icon(0, presets->get_theme_icon("folder", "FileDialog"));
p_item->set_text(0, p_dir->get_name() + "/");
+ p_item->set_editable(0, true);
+ p_item->set_metadata(0, p_dir->get_path());
bool used = false;
+ bool checked = true;
for (int i = 0; i < p_dir->get_subdir_count(); i++) {
TreeItem *subdir = include_files->create_item(p_item);
if (_fill_tree(p_dir->get_subdir(i), subdir, current, p_only_scenes)) {
used = true;
+ checked = checked && subdir->is_checked(0);
} else {
memdelete(subdir);
}
@@ -750,10 +755,12 @@ bool ProjectExportDialog::_fill_tree(EditorFileSystemDirectory *p_dir, TreeItem
file->set_editable(0, true);
file->set_checked(0, current->has_export_file(path));
file->set_metadata(0, path);
+ checked = checked && file->is_checked(0);
used = true;
}
+ p_item->set_checked(0, checked);
return used;
}
@@ -775,13 +782,53 @@ void ProjectExportDialog::_tree_changed() {
String path = item->get_metadata(0);
bool added = item->is_checked(0);
- if (added) {
- current->add_export_file(path);
+ if (path.ends_with("/")) {
+ _check_dir_recursive(item, added);
} else {
- current->remove_export_file(path);
+ if (added) {
+ current->add_export_file(path);
+ } else {
+ current->remove_export_file(path);
+ }
+ }
+ _refresh_parent_checks(item); // Makes parent folder checked if all files/folders are checked.
+}
+
+void ProjectExportDialog::_check_dir_recursive(TreeItem *p_dir, bool p_checked) {
+ for (TreeItem *child = p_dir->get_children(); child; child = child->get_next()) {
+ String path = child->get_metadata(0);
+
+ child->set_checked(0, p_checked);
+ if (path.ends_with("/")) {
+ _check_dir_recursive(child, p_checked);
+ } else {
+ if (p_checked) {
+ get_current_preset()->add_export_file(path);
+ } else {
+ get_current_preset()->remove_export_file(path);
+ }
+ }
}
}
+void ProjectExportDialog::_refresh_parent_checks(TreeItem *p_item) {
+ TreeItem *parent = p_item->get_parent();
+ if (!parent) {
+ return;
+ }
+
+ bool checked = true;
+ for (TreeItem *child = parent->get_children(); child; child = child->get_next()) {
+ checked = checked && child->is_checked(0);
+ if (!checked) {
+ break;
+ }
+ }
+ parent->set_checked(0, checked);
+
+ _refresh_parent_checks(parent);
+}
+
void ProjectExportDialog::_export_pck_zip() {
export_pck_zip->popup_file_dialog();
}
diff --git a/editor/project_export.h b/editor/project_export.h
index 026daac2ad..b8ca0dd9f2 100644
--- a/editor/project_export.h
+++ b/editor/project_export.h
@@ -123,6 +123,8 @@ private:
void _fill_resource_tree();
bool _fill_tree(EditorFileSystemDirectory *p_dir, TreeItem *p_item, Ref<EditorExportPreset> &current, bool p_only_scenes);
void _tree_changed();
+ void _check_dir_recursive(TreeItem *p_dir, bool p_checked);
+ void _refresh_parent_checks(TreeItem *p_item);
Variant get_drag_data_fw(const Point2 &p_point, Control *p_from);
bool can_drop_data_fw(const Point2 &p_point, const Variant &p_data, Control *p_from) const;
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index e3c2ba83f2..f26d44d75a 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -61,6 +61,7 @@ class ProjectDialog : public ConfirmationDialog {
GDCLASS(ProjectDialog, ConfirmationDialog);
public:
+ bool is_folder_empty = true;
enum Mode {
MODE_NEW,
MODE_IMPORT,
@@ -218,7 +219,7 @@ private:
// check if the specified install folder is empty, even though this is not an error, it is good to check here
d->list_dir_begin();
- bool is_empty = true;
+ is_folder_empty = true;
String n = d->get_next();
while (n != String()) {
if (!n.begins_with(".")) {
@@ -226,14 +227,14 @@ private:
// and hidden files/folders to be present.
// For instance, this lets users initialize a Git repository
// and still be able to create a project in the directory afterwards.
- is_empty = false;
+ is_folder_empty = false;
break;
}
n = d->get_next();
}
d->list_dir_end();
- if (!is_empty) {
+ if (!is_folder_empty) {
set_message(TTR("Please choose an empty folder."), MESSAGE_WARNING, INSTALL_PATH);
memdelete(d);
get_ok()->set_disabled(true);
@@ -258,7 +259,7 @@ private:
} else {
// check if the specified folder is empty, even though this is not an error, it is good to check here
d->list_dir_begin();
- bool is_empty = true;
+ is_folder_empty = true;
String n = d->get_next();
while (n != String()) {
if (!n.begins_with(".")) {
@@ -266,18 +267,18 @@ private:
// and hidden files/folders to be present.
// For instance, this lets users initialize a Git repository
// and still be able to create a project in the directory afterwards.
- is_empty = false;
+ is_folder_empty = false;
break;
}
n = d->get_next();
}
d->list_dir_end();
- if (!is_empty) {
- set_message(TTR("Please choose an empty folder."), MESSAGE_ERROR);
+ if (!is_folder_empty) {
+ set_message(TTR("The selected path is not empty. Choosing an empty folder is highly recommended."), MESSAGE_WARNING);
memdelete(d);
- get_ok()->set_disabled(true);
- return "";
+ get_ok()->set_disabled(false);
+ return valid_path;
}
}
@@ -416,6 +417,11 @@ private:
}
}
+ void _nonempty_confirmation_ok_pressed() {
+ is_folder_empty = true;
+ ok_pressed();
+ }
+
void ok_pressed() override {
String dir = project_path->get_text();
@@ -454,6 +460,18 @@ private:
} else {
if (mode == MODE_NEW) {
+ // Before we create a project, check that the target folder is empty.
+ // If not, we need to ask the user if they're sure they want to do this.
+ if (!is_folder_empty) {
+ ConfirmationDialog *cd = memnew(ConfirmationDialog);
+ cd->set_title(TTR("Warning: This folder is not empty"));
+ cd->set_text(TTR("You are about to create a Godot project in a non-empty folder.\nThe entire contents of this folder will be imported as project resources!\n\nAre you sure you wish to continue?"));
+ cd->get_ok()->connect("pressed", callable_mp(this, &ProjectDialog::_nonempty_confirmation_ok_pressed));
+ get_parent()->add_child(cd);
+ cd->popup_centered();
+ cd->grab_focus();
+ return;
+ }
ProjectSettings::CustomMap initial_settings;
if (rasterizer_button_group->get_pressed_button()->get_meta("driver_name") == "Vulkan") {
initial_settings["rendering/quality/driver/driver_name"] = "Vulkan";
@@ -2087,7 +2105,7 @@ void ProjectManager::_run_project_confirm() {
if (selected_main == "") {
run_error_diag->set_text(TTR("Can't run project: no main scene defined.\nPlease edit the project and set the main scene in the Project Settings under the \"Application\" category."));
run_error_diag->popup_centered();
- return;
+ continue;
}
const String &selected = selected_list[i].project_key;
@@ -2097,7 +2115,7 @@ void ProjectManager::_run_project_confirm() {
if (!DirAccess::exists(path.plus_file(ProjectSettings::IMPORTED_FILES_PATH.right(6)))) {
run_error_diag->set_text(TTR("Can't run project: Assets need to be imported.\nPlease edit the project to trigger the initial import."));
run_error_diag->popup_centered();
- return;
+ continue;
}
print_line("Running project: " + path + " (" + selected + ")");
@@ -2348,12 +2366,24 @@ ProjectManager::ProjectManager() {
switch (display_scale) {
case 0: {
- // Try applying a suitable display scale automatically
+ // Try applying a suitable display scale automatically.
#ifdef OSX_ENABLED
editor_set_scale(DisplayServer::get_singleton()->screen_get_max_scale());
#else
const int screen = DisplayServer::get_singleton()->window_get_current_screen();
- editor_set_scale(DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).x > 2000 ? 2.0 : 1.0);
+ float scale;
+ if (DisplayServer::get_singleton()->screen_get_dpi(screen) >= 192 && DisplayServer::get_singleton()->screen_get_size(screen).y >= 1400) {
+ // hiDPI display.
+ scale = 2.0;
+ } else if (DisplayServer::get_singleton()->screen_get_size(screen).y <= 800) {
+ // Small loDPI display. Use a smaller display scale so that editor elements fit more easily.
+ // Icons won't look great, but this is better than having editor elements overflow from its window.
+ scale = 0.75;
+ } else {
+ scale = 1.0;
+ }
+
+ editor_set_scale(scale);
#endif
} break;
@@ -2375,9 +2405,9 @@ ProjectManager::ProjectManager() {
case 6:
editor_set_scale(2.0);
break;
- default: {
+ default:
editor_set_scale(EditorSettings::get_singleton()->get("interface/editor/custom_display_scale"));
- } break;
+ break;
}
// Define a minimum window size to prevent UI elements from overlapping or being cut off
diff --git a/editor/project_manager.h b/editor/project_manager.h
index 407dba0c94..212d693f1d 100644
--- a/editor/project_manager.h
+++ b/editor/project_manager.h
@@ -98,6 +98,7 @@ class ProjectManager : public Control {
void _restart_confirm();
void _exit_dialog();
void _confirm_update_settings();
+ void _nonempty_confirmation_ok_pressed();
void _load_recent_projects();
void _on_project_created(const String &dir);
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 038b18a648..ec225c3c38 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -1348,8 +1348,8 @@ void SceneTreeDock::perform_node_renames(Node *p_base, List<Pair<NodePath, NodeP
break;
}
- // update if the node itself moved up/down the tree hirarchy
- if (root_path == F->get().first) {
+ // update the node itself if it has a valid node path and has not been deleted
+ if (root_path == F->get().first && p != NodePath() && F->get().second != NodePath()) {
NodePath abs_path = NodePath(String(root_path).plus_file(p)).simplified();
NodePath rel_path_new = F->get().second.rel_path_to(abs_path);
@@ -2824,8 +2824,8 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor, Node *p_scene_root, EditorSel
HBoxContainer *filter_hbc = memnew(HBoxContainer);
filter_hbc->add_theme_constant_override("separate", 0);
- ED_SHORTCUT("scene_tree/rename", TTR("Rename"));
- ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_CMD | KEY_F2);
+ ED_SHORTCUT("scene_tree/rename", TTR("Rename"), KEY_F2);
+ ED_SHORTCUT("scene_tree/batch_rename", TTR("Batch Rename"), KEY_MASK_SHIFT | KEY_F2);
ED_SHORTCUT("scene_tree/add_child_node", TTR("Add Child Node"), KEY_MASK_CMD | KEY_A);
ED_SHORTCUT("scene_tree/instance_scene", TTR("Instance Child Scene"));
ED_SHORTCUT("scene_tree/expand_collapse_all", TTR("Expand/Collapse All"));
diff --git a/editor/scene_tree_dock.h b/editor/scene_tree_dock.h
index c2c877bf68..119a499d0f 100644
--- a/editor/scene_tree_dock.h
+++ b/editor/scene_tree_dock.h
@@ -55,7 +55,6 @@ class SceneTreeDock : public VBoxContainer {
GDCLASS(SceneTreeDock, VBoxContainer);
enum Tool {
-
TOOL_NEW,
TOOL_INSTANCE,
TOOL_EXPAND_COLLAPSE,
diff --git a/editor/translations/af.po b/editor/translations/af.po
index 55009e16ae..08b8a7cc53 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -1074,14 +1074,18 @@ msgstr "Eienaars van:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Verwyder geselekteerde lêers uit die projek? (geen ontdoen)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Die lêers wat verwyder word, word vereis deur ander hulpbronne sodat hulle "
"reg kan werk.\n"
@@ -2389,11 +2393,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2401,7 +2410,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3776,6 +3785,11 @@ msgstr ""
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Skuif AutoLaai"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Stoor Hulpbron As..."
@@ -12070,6 +12084,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12115,6 +12137,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index 346ebd62e0..24356c9a1c 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -45,12 +45,13 @@
# ChemicalInk <aladdinalkhafaji@gmail.com>, 2020.
# Musab Alasaifer <mousablasefer@gmail.com>, 2020.
# Yassine Oudjana <y.oudjana@protonmail.com>, 2020.
+# bruvzg <bruvzg13@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-12 00:46+0000\n"
-"Last-Translator: Yassine Oudjana <y.oudjana@protonmail.com>\n"
+"PO-Revision-Date: 2020-11-08 10:26+0000\n"
+"Last-Translator: bruvzg <bruvzg13@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -59,7 +60,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.3.2\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -78,7 +79,7 @@ msgstr "لا يوجد ما يكÙÙŠ من البايتات من أجل ÙÙƒ الØ
#: core/math/expression.cpp
msgid "Invalid input %i (not passed) in expression"
-msgstr "مدخلات خاطئة i% (لم يتم تمريره) ÙÙŠ التعبير"
+msgstr "مدخلات خاطئة %i (لم يتم تمريره) ÙÙŠ التعبير"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -86,7 +87,7 @@ msgstr "لا يمكن إستخدامه Ù†Ùسه لأن الحالة Ùارغة (
#: 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"
@@ -1063,14 +1064,19 @@ msgid "Owners Of:"
msgstr "ملاك:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "إمسح الملÙات المختارة من المشروع؟ (لا يمكن استعادتها)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"المل٠الذي ÙŠÙمسح مطلوب من موارد أخري لكل تعمل جيداً.\n"
"إمسح علي أية حال؟ (لا رجعة)"
@@ -1398,7 +1404,7 @@ msgstr "Ø¥Ùتح نسق مسار الصوت"
#: editor/editor_audio_buses.cpp
msgid "There is no '%s' file."
-msgstr "لا يوجد مل٠'s%'."
+msgstr "لا يوجد مل٠'%s'."
#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp
msgid "Layout"
@@ -1410,7 +1416,7 @@ msgstr "مل٠خطأ، ليس مل٠نسق مسار الصوت."
#: editor/editor_audio_buses.cpp
msgid "Error saving file: %s"
-msgstr "خطأ ÙÙŠ تحميل الملÙ: s%"
+msgstr "خطأ ÙÙŠ تحميل الملÙ: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
@@ -2057,8 +2063,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"لا يوجد حاليا وص٠لهذه الخاصية. الرجاء المساعدة من خلال [url][/color/] "
-"المساهمة واحد [color=$color][url=$url]!"
+"لا يوجد حاليا وص٠لهذه الخاصية. الرجاء المساعدة من خلال [color=$color][url="
+"$url]المساهمة واحد [/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2268,7 +2274,7 @@ msgstr "خطأ خلال تحميل '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr "نهاية مل٠غير مرتقبة 's%'."
+msgstr "نهاية مل٠غير مرتقبة '%s'."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
@@ -2329,19 +2335,25 @@ msgid "Error saving TileSet!"
msgstr "خطأ ÙÙŠ Ø­Ùظ مجموعة البلاط!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "خطآ ÙÙŠ محاولة Ø­Ùظ النسق!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "تخطي نسق المÙحرر الإÙتراضي."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "إسم النسق غير موجود!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "إسترجاع النسق الإÙتراضي إلي الإعدادات الأساسية."
#: editor/editor_node.cpp
@@ -3769,6 +3781,11 @@ msgid "Move To..."
msgstr "تحريك إلي..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "نقل التحميل التلقائي"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "مشهد جديد..."
@@ -4737,7 +4754,7 @@ msgstr "عÙقد البداية والنهاية مطلوبة لأجل الانØ
#: editor/plugins/animation_state_machine_editor.cpp
msgid "No playback resource set at path: %s."
-msgstr "لم يتم تعيين موارد التشغيل ÙÙŠ المسار:Ùª s."
+msgstr "لم يتم تعيين موارد التشغيل ÙÙŠ المسار: %s."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Removed"
@@ -12056,6 +12073,14 @@ msgstr ""
"مسار حزمة تطوير Android SDK للبÙنى المخصوصة، غير صالح ÙÙŠ إعدادات المÙحرر."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12109,6 +12134,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12934,6 +12975,12 @@ msgstr "يمكن تعيين المتغيرات Ùقط ÙÙŠ الذروة ."
msgid "Constants cannot be modified."
msgstr "لا يمكن تعديل الثوابت."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "خطآ ÙÙŠ محاولة Ø­Ùظ النسق!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "تخطي نسق المÙحرر الإÙتراضي."
+
#~ msgid "Move pivot"
#~ msgstr "نقل المحور"
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index afb48710bc..537a5fd7d3 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -11,12 +11,13 @@
# Whod <whodizhod@gmail.com>, 2020.
# Stoyan <stoyan.stoyanov99@protonmail.com>, 2020.
# zooid <the.zooid@gmail.com>, 2020.
+# Любомир ВаÑилев <lyubomirv@gmx.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-27 18:26+0000\n"
-"Last-Translator: zooid <the.zooid@gmail.com>\n"
+"PO-Revision-Date: 2020-11-08 10:26+0000\n"
+"Last-Translator: Любомир ВаÑилев <lyubomirv@gmx.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/bg/>\n"
"Language: bg\n"
@@ -24,7 +25,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.3.2-dev\n"
+"X-Generator: Weblate 4.3.2\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1014,7 +1015,10 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Да Ñе премахнат ли избраните файлове от проекта? (ДейÑтвието е необратимо)"
@@ -1022,7 +1026,8 @@ msgstr ""
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2248,11 +2253,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2260,7 +2270,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3603,6 +3613,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "ПремеÑтване на кадъра"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Ðова Ñцена..."
@@ -4485,9 +4500,8 @@ msgid "Include Gizmos (3D)"
msgstr ""
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Pin AnimationPlayer"
-msgstr "Изтриване на анимациÑта?"
+msgstr "Закачане на AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
@@ -4558,9 +4572,8 @@ msgid "Start and end nodes are needed for a sub-transition."
msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "No playback resource set at path: %s."
-msgstr "Обектът не е базиран на реÑурÑен файл"
+msgstr "ÐÑма реÑурÑ, който може да бъде изпълнен, на пътÑ: %s."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Removed"
@@ -4611,9 +4624,8 @@ msgstr "Режим на възпроизвеждане:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
-#, fuzzy
msgid "AnimationTree"
-msgstr "Изтриване на анимациÑта?"
+msgstr ""
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "New name:"
@@ -4916,9 +4928,8 @@ msgid "No results for \"%s\"."
msgstr ""
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Import..."
-msgstr "Повторно внаÑÑне..."
+msgstr "ВнаÑÑне…"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Plugins..."
@@ -5153,24 +5164,20 @@ msgid "Center"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Left Wide"
-msgstr "Изглед ОтлÑво."
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Top Wide"
-msgstr "Изглед Отгоре."
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Right Wide"
-msgstr "Изглед ОтдÑÑно."
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Wide"
-msgstr "Изглед Отдолу."
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "VCenter Wide"
@@ -5478,9 +5485,8 @@ msgid "Center Selection"
msgstr "Центриране върху избраното"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Frame Selection"
-msgstr "Покажи СелекциÑта (вмеÑти в Ñ†ÐµÐ»Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ†)"
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
@@ -5515,9 +5521,8 @@ msgid "Auto Insert Key"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Animation Key and Pose Options"
-msgstr "Промени Името на ÐнимациÑта:"
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
@@ -5540,9 +5545,8 @@ msgid "Divide grid step by 2"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Pan View"
-msgstr "Изглед Отзад."
+msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -5637,9 +5641,8 @@ msgstr ""
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Папки и файлове:"
+msgstr ""
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5711,9 +5714,8 @@ msgid "Left Linear"
msgstr "Линейно"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Right Linear"
-msgstr "Изглед ОтдÑÑно."
+msgstr ""
#: editor/plugins/curve_editor_plugin.cpp
msgid "Load Preset"
@@ -5789,9 +5791,8 @@ msgid "Couldn't create a single convex collision shape."
msgstr ""
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Single Convex Shape"
-msgstr "Създай нови възли."
+msgstr "Създаване на единична изпъкнала форма"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create multiple convex collision shapes for the scene root."
@@ -5802,9 +5803,8 @@ msgid "Couldn't create any collision shapes."
msgstr "Ðе могат да бъдат Ñъздадени никакви форми за колизии."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Multiple Convex Shapes"
-msgstr "Създай нови възли."
+msgstr "Създаване на нÑколко изпъкнали форми"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
@@ -7087,9 +7087,8 @@ msgid "Scaling: "
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translating: "
-msgstr "ДобавÑне на превод"
+msgstr "ТранÑлиране: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
@@ -7180,14 +7179,12 @@ msgid "Rear"
msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Align Transform with View"
-msgstr "Изглед ОтдÑÑно."
+msgstr "ПодравнÑване на транÑформациÑта Ñ Ð¸Ð·Ð³Ð»ÐµÐ´Ð°"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Align Rotation with View"
-msgstr "Изглед ОтдÑÑно."
+msgstr "ПодравнÑване на ротациÑта Ñ Ð¸Ð·Ð³Ð»ÐµÐ´Ð°"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
@@ -7433,9 +7430,8 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Settings..."
-msgstr "ÐаÑтройки"
+msgstr "ÐаÑтройки…"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
@@ -7502,9 +7498,8 @@ msgid "Nameless gizmo"
msgstr ""
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create Mesh2D"
-msgstr "Създайте нов/а %s"
+msgstr "Създаване на Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
#, fuzzy
@@ -8073,9 +8068,8 @@ msgid "Region"
msgstr "Режим на Завъртане"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Collision"
-msgstr "Промени ÑъщеÑтвуващ полигон:"
+msgstr "КолизиÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8093,9 +8087,8 @@ msgid "Bitmask"
msgstr "Режим на Завъртане"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Priority"
-msgstr "Режим на изнаÑÑне:"
+msgstr "Приоритет"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8108,9 +8101,8 @@ msgid "Region Mode"
msgstr "Режим на Завъртане"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Collision Mode"
-msgstr "Промени ÑъщеÑтвуващ полигон:"
+msgstr "Режим на колизии"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8128,9 +8120,8 @@ msgid "Bitmask Mode"
msgstr "Режим на Завъртане"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Priority Mode"
-msgstr "Режим на изнаÑÑне:"
+msgstr "Режим на приоритет"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8147,9 +8138,8 @@ msgid "Copy bitmask."
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Paste bitmask."
-msgstr "ПоÑтавÑне на възелите"
+msgstr "ПоÑтавÑне на битова маÑка."
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8216,30 +8206,32 @@ msgid ""
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Delete selected Rect."
-msgstr "Изтрий избраните файлове?"
+msgstr "Изтриване на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Rect."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"Select current edited sub-tile.\n"
"Click on another Tile to edit it."
-msgstr "Избиране на текущата папка"
+msgstr ""
+"Изберете редактираната в момента под-плочка.\n"
+"Щракнете върху друга плочка, за да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Delete polygon."
-msgstr "Изтриване на анимациÑта?"
+msgstr "Изтриване на полигона."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"LMB: Set bit on.\n"
"RMB: Set bit off.\n"
"Shift+LMB: Set wildcard bit.\n"
"Click on another Tile to edit it."
-msgstr "Избиране на текущата папка"
+msgstr ""
+"ЛÑв бутон: включване на бита.\n"
+"ДеÑен бутон: изключване на бита.\n"
+"Shift + лÑв бутон: включване на бита за замеÑтване.\n"
+"Щракнете на друга плочка, за да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
@@ -8255,11 +8247,12 @@ msgid ""
msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"Select sub-tile to change its z index.\n"
"Click on another Tile to edit it."
-msgstr "Избиране на текущата папка"
+msgstr ""
+"Изберете под-плочка, за да промените индекÑа Ñ Ð¿Ð¾ Z.\n"
+"Щракнете на друга плочка, за да Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ñ‚Ðµ."
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8281,9 +8274,8 @@ msgid "Edit Tile Bitmask"
msgstr "Промени Филтрите"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Collision Polygon"
-msgstr "Промени ÑъщеÑтвуващ полигон:"
+msgstr "Редактиране на полигона за колизии"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8291,9 +8283,8 @@ msgid "Edit Occlusion Polygon"
msgstr "ПриÑтавки"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Navigation Polygon"
-msgstr "Промени ÑъщеÑтвуващ полигон:"
+msgstr "Редактиране на полигона за навигациÑ"
#: editor/plugins/tile_set_editor_plugin.cpp
#, fuzzy
@@ -8354,23 +8345,20 @@ msgid "Make Concave"
msgstr "ПремеÑтване на Полигон"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Collision Polygon"
-msgstr "Създаване на папка"
+msgstr "Създаване на полигон за колизии"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Occlusion Polygon"
-msgstr "Създаване на папка"
+msgstr "Създаване на полигон за прикриване"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "This property can't be changed."
-msgstr ""
+msgstr "Това ÑвойÑтво не може да бъде променено."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "TileSet"
-msgstr "Файл:"
+msgstr "Плочен набор"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No VCS addons are available."
@@ -8410,9 +8398,8 @@ msgid "Staging area"
msgstr ""
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Detect new changes"
-msgstr "Създай нови възли."
+msgstr "ЗаÑичане на новите промени"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Changes"
@@ -8476,14 +8463,12 @@ msgid "(GLES3 only)"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Add Output"
-msgstr "Любими:"
+msgstr "ДобавÑне на изход"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Scalar"
-msgstr "Мащаб:"
+msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
#, fuzzy
@@ -8499,27 +8484,24 @@ msgid "Sampler"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Add input port"
-msgstr "Любими:"
+msgstr "ДобавÑне на входÑщ порт"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add output port"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change input port type"
-msgstr "Промени Името на ÐнимациÑта:"
+msgstr "ПромÑна на типа на входÑÑ‰Ð¸Ñ Ð¿Ð¾Ñ€Ñ‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change output port type"
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change input port name"
-msgstr "Промени Името на ÐнимациÑта:"
+msgstr "ПромÑна на името на входÑÑ‰Ð¸Ñ Ð¿Ð¾Ñ€Ñ‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change output port name"
@@ -9008,9 +8990,8 @@ msgid "Scalar constant."
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Scalar uniform."
-msgstr "ИзнаÑÑне към платформа"
+msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Perform the cubic texture lookup."
@@ -9033,9 +9014,8 @@ msgid "2D texture uniform lookup with triplanar."
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Transform function."
-msgstr "Създаване на папка"
+msgstr "Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð° транÑформациÑ."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9077,19 +9057,16 @@ msgid "Multiplies vector by transform."
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Transform constant."
-msgstr "Създаване на папка"
+msgstr "КонÑтанта за транÑформациÑ."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Transform uniform."
-msgstr "Създаване на папка"
+msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Vector function."
-msgstr "Отиди на Ред"
+msgstr "Векторна функциÑ."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector operator."
@@ -10133,9 +10110,8 @@ msgid "Batch Rename"
msgstr ""
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Replace:"
-msgstr "ЗамÑна: "
+msgstr "ЗамÑна:"
#: editor/rename_dialog.cpp
msgid "Prefix:"
@@ -10246,9 +10222,8 @@ msgid "Reset"
msgstr ""
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Regular Expression Error:"
-msgstr "Използване на регулÑрни изрази"
+msgstr "Грешка в регулÑÑ€Ð½Ð¸Ñ Ð¸Ð·Ñ€Ð°Ð·:"
#: editor/rename_dialog.cpp
msgid "At character %s"
@@ -10500,9 +10475,8 @@ msgid "Change Type"
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Reparent to New Node"
-msgstr "Създай нови възли."
+msgstr "ПремеÑтване под нов възел"
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -10522,9 +10496,8 @@ msgid "Copy Node Path"
msgstr ""
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "МолÑ, потвърдете..."
+msgstr "Изтриване (без потвърждение)"
#: editor/scene_tree_dock.cpp
#, fuzzy
@@ -10573,9 +10546,8 @@ msgid "Button Group"
msgstr "Копче 7"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "(Connecting From)"
-msgstr "Свързване..."
+msgstr "(Свързване от)"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
@@ -10600,9 +10572,8 @@ msgid ""
msgstr ""
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Open Script:"
-msgstr "Ðова Ñцена"
+msgstr "ОтварÑне на Ñкрипт:"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -10659,9 +10630,8 @@ msgid "Path is not local."
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid base path."
-msgstr "Име:"
+msgstr "Ðеправилен базов път."
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -10682,9 +10652,8 @@ msgid "Wrong extension chosen."
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading template '%s'"
-msgstr "Грешка при зареждането на шрифта."
+msgstr "Грешка при зареждане на шаблона „%s“"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -10692,9 +10661,8 @@ msgid "Error - Could not create script in filesystem."
msgstr "ÐеуÑпешно Ñъздаване на папка."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Error loading script from %s"
-msgstr "Грешка при зареждането на шрифта."
+msgstr "Грешка при зареждане на Ñкрипт от %s"
#: editor/script_create_dialog.cpp
msgid "Overrides"
@@ -10714,9 +10682,8 @@ msgid "Open Script"
msgstr "Ðова Ñцена"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "File exists, it will be reused."
-msgstr "Файлът ÑъщеÑтвува. ИÑкате ли да го презапишете?"
+msgstr "Файлът ÑъщеÑтвува и ще бъде преизползван."
#: editor/script_create_dialog.cpp
msgid "Invalid path."
@@ -10744,9 +10711,8 @@ msgid "Built-in script (into scene file)."
msgstr ""
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Will create a new script file."
-msgstr "Създаване на нов Ñкрипт"
+msgstr "Ще Ñъздаде нов Ñкиптов файл."
#: editor/script_create_dialog.cpp
msgid "Will load an existing script file."
@@ -10769,14 +10735,12 @@ msgid "Class Name:"
msgstr "КлаÑ:"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Template:"
-msgstr "Шаблони"
+msgstr "Шаблон:"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in Script:"
-msgstr "Ðова Ñцена"
+msgstr "Вграден Ñкрипт:"
#: editor/script_create_dialog.cpp
#, fuzzy
@@ -10784,33 +10748,28 @@ msgid "Attach Node Script"
msgstr "Ðова Ñцена"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote "
-msgstr "ЗатварÑне на вÑичко"
+msgstr "Отдалечено "
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
msgstr ""
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Warning:"
-msgstr "ПредупреждениÑ:"
+msgstr "Предупреждение:"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Error:"
-msgstr "Грешки:"
+msgstr "Грешка:"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "C++ Error"
-msgstr "Грешки"
+msgstr "Грешка в C++"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "C++ Error:"
-msgstr "Грешки:"
+msgstr "Грешка в C++:"
#: editor/script_editor_debugger.cpp
msgid "C++ Source"
@@ -10833,9 +10792,8 @@ msgid "Errors"
msgstr "Грешки"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Child process connected."
-msgstr "Разкачи"
+msgstr "ДъщерниÑÑ‚ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ðµ Ñвързан."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -11395,14 +11353,12 @@ msgid "Set Variable Type"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Input Port"
-msgstr "Любими:"
+msgstr "ДобавÑне на входÑщ порт"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Output Port"
-msgstr "Любими:"
+msgstr "ДобавÑне на изходÑщ порт"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -11654,9 +11610,8 @@ msgid "Add Nodes..."
msgstr "Добави Възел..."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function..."
-msgstr "Отиди на Ред"
+msgstr "ДобавÑне на функциÑ…"
#: modules/visual_script/visual_script_editor.cpp
msgid "function_name"
@@ -11692,9 +11647,8 @@ msgid "Refresh Graph"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Member"
-msgstr "Файл:"
+msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -11816,6 +11770,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11826,9 +11788,8 @@ msgid "Invalid public key for APK expansion."
msgstr ""
#: platform/android/export/export.cpp
-#, fuzzy
msgid "Invalid package name:"
-msgstr "невалидно име на Група."
+msgstr "Ðеправилно име на пакет:"
#: platform/android/export/export.cpp
msgid ""
@@ -11861,6 +11822,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -11939,28 +11916,24 @@ msgid "Run exported HTML in the system's default browser."
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not write file:"
-msgstr "ÐеуÑпешно Ñъздаване на папка."
+msgstr "Файлът не може да бъде запиÑан:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not open template for export:"
-msgstr "ÐеуÑпешно Ñъздаване на папка."
+msgstr "Шаблонът не може да Ñе отвори за изнаÑÑне:"
#: platform/javascript/export/export.cpp
msgid "Invalid export template:"
msgstr ""
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read custom HTML shell:"
-msgstr "ÐеуÑпешно Ñъздаване на папка."
+msgstr "Ðе може да Ñе прочете перÑонализирана HTML-обвивка:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read boot splash image file:"
-msgstr "ÐеуÑпешно Ñъздаване на папка."
+msgstr "Ðе може да Ñе прочете файл Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ при Ñтартиране:"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -11968,19 +11941,16 @@ msgid "Using default boot splash image."
msgstr "ÐеуÑпешно Ñъздаване на папка."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package short name."
-msgstr "невалидно име на Група."
+msgstr "Ðеправилно кратко име на пакет."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package unique name."
-msgstr "невалидно име на Група."
+msgstr "Ðеправилно уникално име на пакет."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package publisher display name."
-msgstr "невалидно име на Група."
+msgstr "Ðеправилно име за показване на Ð¸Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° пакет."
#: platform/uwp/export/export.cpp
msgid "Invalid product GUID."
@@ -12075,13 +12045,12 @@ msgstr ""
"форма."
#: scene/2d/collision_shape_2d.cpp
-#, fuzzy
msgid ""
"A shape must be provided for CollisionShape2D to function. Please create a "
"shape resource for it!"
msgstr ""
-"За да работи CollisionShape2D, е нужно да му Ñе даде форма. МолÑ, Ñъздайте "
-"му Shape2D реÑурÑ."
+"За да работи CollisionShape2D, е необходимо да Ñе зададе форма. МолÑ, "
+"Ñъздайте реÑÑƒÑ€Ñ Ñ Ñ„Ð¾Ñ€Ð¼Ð° за него!"
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -12534,7 +12503,7 @@ msgstr ""
#: scene/gui/tree.cpp
msgid "(Other)"
-msgstr ""
+msgstr "(Други)"
#: scene/main/scene_tree.cpp
msgid ""
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index 9d0dc019e0..4e960d8d50 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -1094,14 +1094,18 @@ msgstr "সà§à¦¬à¦¤à§à¦¬à¦¾à¦§à¦¿à¦•à¦¾à¦°à§€à¦¸à¦®à§‚হ:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "নিরà§à¦¬à¦¾à¦šà¦¿à¦¤ ফাইলসমূহ পà§à¦°à¦•à¦²à§à¦ª হতে অপসারণ করবেন? (অফেরৎযোগà§à¦¯)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"যেসব ফাইল অপসারিত হচà§à¦›à§‡ তারা অনà§à¦¯à¦¾à¦¨à§à¦¯ রিসোরà§à¦¸ ফাইলের কারà§à¦¯à¦•à¦°à¦°à§à¦ªà§‡ কাজ করার জনà§à¦¯ "
"দরকারি।\n"
@@ -2452,19 +2456,25 @@ msgid "Error saving TileSet!"
msgstr "TileSet সংরকà§à¦·à¦£à§‡ সমসà§à¦¯à¦¾ হয়েছে!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "লেআউট/নকশা সংরকà§à¦·à¦£à§‡à¦° চেষà§à¦Ÿà¦¾à§Ÿ সমসà§à¦¯à¦¾ হয়েছে!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡à¦° সাধারণ লেআউট/নকশা পরিবরà§à¦¤à¦¿à¦¤ হয়েছে।"
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "লেআউট/নকশার নাম পাওয়া যায়নি!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "সাধারণ লেআউট/নকশা আদি সেটিংসে পà§à¦°à¦¤à§à¦¯à¦¾à¦¬à¦°à§à¦¤à¦¿à¦¤ হয়েছে।"
#: editor/editor_node.cpp
@@ -4011,6 +4021,11 @@ msgstr "à¦à¦–ানে সরান..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Autoload সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করà§à¦¨"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "নতà§à¦¨ দৃশà§à¦¯"
@@ -12855,6 +12870,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12900,6 +12923,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13652,6 +13691,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "লেআউট/নকশা সংরকà§à¦·à¦£à§‡à¦° চেষà§à¦Ÿà¦¾à§Ÿ সমসà§à¦¯à¦¾ হয়েছে!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "à¦à¦¡à¦¿à¦Ÿà¦°à§‡à¦° সাধারণ লেআউট/নকশা পরিবরà§à¦¤à¦¿à¦¤ হয়েছে।"
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "কেনà§à¦¦à§à¦° সà§à¦¥à¦¾à¦¨à¦¾à¦¨à§à¦¤à¦° করà§à¦¨"
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index e930c8ea22..f8a9c61806 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -1041,14 +1041,19 @@ msgid "Owners Of:"
msgstr "Propietaris de:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Eliminar els fitxers seleccionats del projecte? (No es pot restaurar)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Els fitxers seleccionats són utilitzats per altres recursos.\n"
"Voleu Eliminar-los de totes maneres? (No es pot desfer!)"
@@ -2321,19 +2326,25 @@ msgid "Error saving TileSet!"
msgstr "Error en desar el TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Error en desar els canvis!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "No s'ha trobat el nom del Disseny!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "S'ha restaurat la configuració predeterminada."
#: editor/editor_node.cpp
@@ -3797,6 +3808,11 @@ msgid "Move To..."
msgstr "Mou cap a..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Mou l'AutoCàrrega"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nova Escena..."
@@ -12422,6 +12438,14 @@ msgstr ""
"la configuració de l'editor."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
#, fuzzy
msgid ""
"Android build template not installed in the project. Install it from the "
@@ -12469,6 +12493,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13292,6 +13332,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Les constants no es poden modificar."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Error en desar els canvis!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "S'han sobreescrit els Ajustos Predeterminats de l'Editor."
+
#~ msgid "Move pivot"
#~ msgstr "Moure pivot"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index f5eab2658e..dbe18d831b 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -22,12 +22,14 @@
# Zbyněk <zbynek.fiala@gmail.com>, 2020.
# Daniel Kříž <Daniel.kriz@protonmail.com>, 2020.
# VladimirBlazek <vblazek042@gmail.com>, 2020.
+# kubajz22 <til.jakubesko@seznam.cz>, 2020.
+# Václav Blažej <vaclavblazej@seznam.cz>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-12 00:46+0000\n"
-"Last-Translator: VladimirBlazek <vblazek042@gmail.com>\n"
+"PO-Revision-Date: 2020-11-17 11:07+0000\n"
+"Last-Translator: Václav Blažej <vaclavblazej@seznam.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/"
"cs/>\n"
"Language: cs\n"
@@ -35,7 +37,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -277,9 +279,8 @@ msgid "Interpolation Mode"
msgstr "InterpolaÄní režim"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Loop Wrap Mode (Interpolate end with beginning on loop)"
-msgstr "Režim ovinuté smyÄky (interpolace konce se zaÄátkem ve smyÄce)"
+msgstr "Režim uzavÅ™ené smyÄky (Interpolace mezi koncem a zaÄátkem smyÄky)"
#: editor/animation_track_editor.cpp
msgid "Remove this track."
@@ -291,11 +292,11 @@ msgstr "ÄŒas (s): "
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
-msgstr "Přepínací Stopa Povolena"
+msgstr "Přepínací stopa povolena"
#: editor/animation_track_editor.cpp
msgid "Continuous"
-msgstr "Nepřetržité"
+msgstr "Spojité"
#: editor/animation_track_editor.cpp
msgid "Discrete"
@@ -307,7 +308,7 @@ msgstr "Spoušť"
#: editor/animation_track_editor.cpp
msgid "Capture"
-msgstr "Zachytit"
+msgstr "Snímat"
#: editor/animation_track_editor.cpp
msgid "Nearest"
@@ -323,9 +324,8 @@ msgid "Cubic"
msgstr "Kubická"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Clamp Loop Interp"
-msgstr "Režim svorkové smyÄky"
+msgstr "Interpolace smyÄky svorkou"
#: editor/animation_track_editor.cpp
msgid "Wrap Loop Interp"
@@ -398,7 +398,7 @@ msgstr "Animace: Vložit stopu a klíÄ"
#: editor/animation_track_editor.cpp
msgid "Anim Insert Key"
-msgstr "Animace: vložit klíÄ"
+msgstr "Animace: Vložit klíÄ"
#: editor/animation_track_editor.cpp
msgid "Change Animation Step"
@@ -406,7 +406,7 @@ msgstr "Změnit krok animace"
#: editor/animation_track_editor.cpp
msgid "Rearrange Tracks"
-msgstr "Přeskupit stopy"
+msgstr "Upravit pořadí stop"
#: editor/animation_track_editor.cpp
msgid "Transform tracks only apply to Spatial-based nodes."
@@ -446,7 +446,7 @@ msgstr "Přidat Bézierovu stopu"
#: editor/animation_track_editor.cpp
msgid "Track path is invalid, so can't add a key."
-msgstr "Cesta stopy není validní, nelze vložit klíÄ."
+msgstr "Cesta stopy není validní, tak nelze pÅ™idat klíÄ."
#: editor/animation_track_editor.cpp
msgid "Track is not of type Spatial, can't insert key"
@@ -492,8 +492,8 @@ msgstr "Animace: zmÄ›nit měřítko klíÄů"
msgid ""
"This option does not work for Bezier editing, as it's only a single track."
msgstr ""
-"Tato možnost nefunguje pro úpravy Beziérovy křivky , protože se jedná pouze "
-"o jednu stopu."
+"Tato možnost nefunguje pro úpravy Beziérovy křivky, protože se jedná pouze o "
+"jednu stopu."
#: editor/animation_track_editor.cpp
msgid ""
@@ -522,9 +522,9 @@ msgid "Warning: Editing imported animation"
msgstr "Upozornění: Upravuje se importovaná animace"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Select an AnimationPlayer node to create and edit animations."
-msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer."
+msgstr ""
+"Pro přidání a úpravu animací vyberte ze stromu scény uzel AnimationPlayer."
#: editor/animation_track_editor.cpp
msgid "Only show tracks from nodes selected in tree."
@@ -757,7 +757,7 @@ msgstr "Zvětšit"
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Out"
-msgstr "Změnšit"
+msgstr "Zmenšit"
#: editor/code_editor.cpp
msgid "Reset Zoom"
@@ -797,7 +797,7 @@ msgstr "Připojit ke skriptu:"
#: editor/connections_dialog.cpp
msgid "From Signal:"
-msgstr "Z signálu:"
+msgstr "Ze signálu:"
#: editor/connections_dialog.cpp
msgid "Scene does not contain any script."
@@ -918,9 +918,8 @@ msgid "Signals"
msgstr "Signály"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Filter signals"
-msgstr "Filtrovat soubory..."
+msgstr "Filtrovat signály"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from this signal?"
@@ -992,7 +991,7 @@ msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"Scéna '%s' se právě upravuje.\n"
+"Scéna \"%s\" se právě upravuje.\n"
"ZmÄ›ny se projeví po opÄ›tovném naÄtení."
#: editor/dependency_editor.cpp
@@ -1000,7 +999,7 @@ msgid ""
"Resource '%s' is in use.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"Zdroj '%s' se právě používá.\n"
+"Zdroj \"%s\" se právě používá.\n"
"ZmÄ›ny se projeví po opÄ›tovném naÄtení."
#: editor/dependency_editor.cpp
@@ -1048,14 +1047,19 @@ msgid "Owners Of:"
msgstr "Vlastníci:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Odebrat vybrané soubory z projektu? (Nelze vrátit zpět)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Soubory ke smazání potÅ™ebují jiné zdroje ke své Äinnosti.\n"
"Přesto je chcete smazat? (nelze vrátit zpět)"
@@ -1164,18 +1168,16 @@ msgid "Gold Sponsors"
msgstr "Zlatí sponzoři"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Silver Sponsors"
-msgstr "Stříbrní dárci"
+msgstr "Stříbrní sponzoři"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Sponsors"
-msgstr "Bronzoví dárci"
+msgstr "Bronzoví sponzoři"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
-msgstr "Malí sponzoři"
+msgstr "Mini sponzoři"
#: editor/editor_about.cpp
msgid "Gold Donors"
@@ -1211,7 +1213,7 @@ msgstr ""
"Godot Engine závisí na volně dostupných a open source knihovnách od třetích "
"stran; všechny jsou kompatibilní s podmínkami jeho MIT licence. Následuje "
"plný výÄet tÄ›chto komponent tÅ™etích stran s jejich přísluÅ¡nými popisy "
-"autorských práv a s licenÄními podmínkami."
+"autorských práv a licenÄními podmínkami."
#: editor/editor_about.cpp
msgid "All Components"
@@ -1276,39 +1278,39 @@ msgstr "Přidat efekt"
#: editor/editor_audio_buses.cpp
msgid "Rename Audio Bus"
-msgstr "Přejmenovat Audio Bus"
+msgstr "Přejmenovat zvukovou sběrnici"
#: editor/editor_audio_buses.cpp
msgid "Change Audio Bus Volume"
-msgstr "Změnit hlasitost Audio Busu"
+msgstr "Změnit hlasitost zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr "Hraje pouze tento Audio Bus"
+msgstr "Přepnout režim sólo zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr "Ztlumit tento Audio Bus"
+msgstr "Přepnout ztlumení zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr ""
+msgstr "Přepnout bypass efektů na zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
-msgstr ""
+msgstr "Vybrat přenos zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Add Audio Bus Effect"
-msgstr "Přidat Audio Bus efekt"
+msgstr "Přidat efekt zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Move Bus Effect"
-msgstr "Přesunout Bus efekt"
+msgstr "Přesunout efekt zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Delete Bus Effect"
-msgstr "Smazat Bus efekt"
+msgstr "Smazat efekt zvukové sběrnice"
#: editor/editor_audio_buses.cpp
msgid "Drag & drop to rearrange."
@@ -1471,7 +1473,7 @@ msgstr "Přejmenovat AutoLoad"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr ""
+msgstr "PÅ™epnout auto-naÄítání globálních promÄ›nných"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
@@ -1491,7 +1493,7 @@ msgstr "Přeskupit Autoloady"
#: editor/editor_autoload_settings.cpp
msgid "Can't add autoload:"
-msgstr ""
+msgstr "Nelze pÅ™idat auto-naÄítání:"
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1516,7 +1518,7 @@ msgstr "Název"
#: editor/editor_autoload_settings.cpp
msgid "Singleton"
-msgstr "Singleton (jedináÄek)"
+msgstr "Singleton"
#: editor/editor_data.cpp editor/inspector_dock.cpp
msgid "Paste Params"
@@ -1578,7 +1580,7 @@ msgstr "Ukládám soubor:"
#: editor/editor_export.cpp
msgid "No export template found at the expected path:"
-msgstr "Na oÄekávané cestÄ› nebyly nalezeny žádné exportní Å¡ablony:"
+msgstr "Na oÄekávané cestÄ› nebyly nalezeny žádné Å¡ablony exportu:"
#: editor/editor_export.cpp
msgid "Packing"
@@ -1613,34 +1615,31 @@ msgstr ""
"Enabled'."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"Cílová platforma vyžaduje kompresi textur 'ETC' pro GLES2. Povolte 'Import "
-"Etc' v nastaveních projektu."
+"Cílová platforma vyžaduje kompresi textur 'PVRTC' pro GLES2. Povolte 'Import "
+"Pvrtc' v nastavení projektu."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"Cílová platforma vyžaduje kompresi textur 'ETC2' pro GLES3. Povolte 'Import "
-"Etc 2' v nastaveních projektu."
+"Cílová platforma vyžaduje kompresi textur 'ETC2' nebo 'PVRTC' pro GLES3. "
+"Povolte 'Import Etc 2' nebo 'Import Pvrtc' v nastavení projektu."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"Cílová platforma vyžaduje kompresi textur 'ETC' pro použití GLES2 jako "
+"Cílová platforma vyžaduje kompresi textur 'PVRTC' pro použití GLES2 jako "
"zálohy.\n"
-"Povolte 'Import Etc' v nastaveních projektu, nebo vypněte 'Driver Fallback "
+"Povolte 'Import Pvrtc' v nastavení projektu, nebo vypněte 'Driver Fallback "
"Enabled'."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -1680,18 +1679,16 @@ msgid "Scene Tree Editing"
msgstr "Úpravy stromu scény"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Node Dock"
-msgstr "Uzel přesunut"
+msgstr "Panel uzlů"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "FileSystem Dock"
msgstr "Souborový systém"
#: editor/editor_feature_profile.cpp
msgid "Import Dock"
-msgstr "Importovat dok"
+msgstr "Importovat panel"
#: editor/editor_feature_profile.cpp
msgid "Erase profile '%s'? (no undo)"
@@ -1772,11 +1769,11 @@ msgstr "Nový"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/project_manager.cpp
msgid "Import"
-msgstr "Importovat"
+msgstr "Import"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
-msgstr "Exportovat"
+msgstr "Export"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1795,9 +1792,8 @@ msgid "Erase Profile"
msgstr "Smazat profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Godot Feature Profile"
-msgstr "Spravovat exportní šablony"
+msgstr "Godot feature profil"
#: editor/editor_feature_profile.cpp
msgid "Import Profile(s)"
@@ -1968,7 +1964,7 @@ msgstr "Je nutné použít platnou příponu."
#: editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr ""
+msgstr "Sken zdrojů"
#: editor/editor_file_system.cpp
msgid ""
@@ -2066,7 +2062,7 @@ msgstr ""
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr "Prohledat nápovědu"
+msgstr "Hledat v dokumentaci"
#: editor/editor_help_search.cpp
msgid "Case Sensitive"
@@ -2105,9 +2101,8 @@ msgid "Theme Properties Only"
msgstr "Pouze vlastnosti motivu"
#: editor/editor_help_search.cpp
-#, fuzzy
msgid "Member Type"
-msgstr "Členové"
+msgstr "Typ Älena"
#: editor/editor_help_search.cpp
msgid "Class"
@@ -2161,7 +2156,7 @@ msgstr "Kopírovat výběr"
#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
msgid "Clear"
-msgstr "VyÄistit"
+msgstr "Promazat"
#: editor/editor_log.cpp
msgid "Clear Output"
@@ -2291,6 +2286,8 @@ msgid ""
"This scene can't be saved because there is a cyclic instancing inclusion.\n"
"Please resolve it and then attempt to save again."
msgstr ""
+"Tato scéna nemůže být uložena, protože obsahuje cyklickou referenci.\n"
+"Odstraňte ji, a poté zkuste uložit znovu."
#: editor/editor_node.cpp
msgid ""
@@ -2321,19 +2318,25 @@ msgid "Error saving TileSet!"
msgstr "Chyba při ukládání TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Chyba při pokusu uložit rozložení!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Výchozí rozložení editoru přepsáno."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Jméno rozložení nenalezeno!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Obnoveno výchozí rozložení na základní nastavení."
#: editor/editor_node.cpp
@@ -2410,7 +2413,7 @@ msgstr "Rychle otevřít scénu..."
#: editor/editor_node.cpp
msgid "Quick Open Script..."
-msgstr "Rychlé otevření skriptu..."
+msgstr "Rychle otevřít skript..."
#: editor/editor_node.cpp
msgid "Save & Close"
@@ -2481,10 +2484,12 @@ msgid ""
"The current scene has unsaved changes.\n"
"Reload the saved scene anyway? This action cannot be undone."
msgstr ""
+"Tato scéna obsahuje neuložené změny.\n"
+"PÅ™esto znovu naÄíst? Tuto akci nelze vrátit zpÄ›t."
#: editor/editor_node.cpp
msgid "Quick Run Scene..."
-msgstr "Rychlé spuštění scény..."
+msgstr "Rychle spustit scénu..."
#: editor/editor_node.cpp
msgid "Quit"
@@ -2604,8 +2609,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"Vybraná scéna '%s' neexistuje, vybrat platnou? \n"
-"Později to můžete změnit v \"Nastavení projektu\" v kategorii 'application'."
+"Vybraná scéna '%s' neexistuje, vybrat platnou?\n"
+"Později to můžete změnit v \"Nastavení projektu\" v kategorii 'application'."
#: editor/editor_node.cpp
msgid ""
@@ -2613,6 +2618,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Vybraná scéna '%s' není platný soubor scény. Vybrat jinou?\n"
+"Můžete ji později změnit v \"Nastavení projektu\" v kategorii \"aplikace\"."
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -2722,7 +2729,7 @@ msgstr "Nová scéna"
#: editor/editor_node.cpp
msgid "New Inherited Scene..."
-msgstr "Nová odvozená scéna..."
+msgstr "Nová zděděná scéna..."
#: editor/editor_node.cpp
msgid "Open Scene..."
@@ -2793,7 +2800,7 @@ msgstr "Exportovat..."
#: editor/editor_node.cpp
msgid "Install Android Build Template..."
-msgstr ""
+msgstr "Nainstalovat kompilaÄní Å¡ablonu pro Android..."
#: editor/editor_node.cpp
msgid "Open Project Data Folder"
@@ -2829,14 +2836,17 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
+"Pokud je tato možnost povolena, použití one-click deploy způsobí, že se "
+"aplikace pokusí pÅ™ipojit k IP tohoto poÄítaÄe, takže spuÅ¡tÄ›ný projekt může "
+"být laděn.\n"
+"Tato možnost je urÄena pro vzdálené ladÄ›ní (typicky s mobilním zařízením).\n"
+"Nemusíte ji povolovat abyste mohli použít lokální ladění GDScriptu."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Small Deploy with Network Filesystem"
-msgstr "Minimální nasazení se síťovým FS"
+msgstr "Tenké nasazení pomocí síťového souborového sistému"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, using one-click deploy for Android will only "
"export an executable without the project data.\n"
@@ -2845,72 +2855,67 @@ msgid ""
"On Android, deploying will use the USB cable for faster performance. This "
"option speeds up testing for projects with large assets."
msgstr ""
-"Když je tato možnost povolena, export nebo nasazení bude vytvářet minimální "
-"spustitelný soubor.\n"
-"Souborový systém bude poskytnut editorem projektu přes sít.\n"
-"Pro nasazení na Android bude použít USB kabel pro dosažení vyššího výkonu. "
-"Tato možnost urychluje testování objemných her."
+"Když je tato možnost vybrána, Android Quick Deployment exportuje pouze "
+"spustitelný soubor bez dat projektu.\n"
+"Souborový systém bude z projektu sdílen editorem po síti.\n"
+"V systému Android bude nasazení používat kabel USB pro rychlejší výkon. Tato "
+"možnost výrazně zrychluje testování velkých her."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
msgstr "Viditelné kolizní tvary"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, collision shapes and raycast nodes (for 2D and "
"3D) will be visible in the running project."
msgstr ""
-"Kolizní tvary a raycast uzly (pro 2D a 3D) budou viditelné během hry, po "
-"aktivaci této volby."
+"když je povolena tato volba, tak lze během hry vidět kolizní tvary a raycast "
+"uzly (pro 2D a 3D)."
#: editor/editor_node.cpp
msgid "Visible Navigation"
msgstr "Viditelná navigace"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, navigation meshes and polygons will be visible "
"in the running project."
msgstr ""
-"NavigaÄní meshe a polygony budou viditelné bÄ›hem hry, po aktivaci této volby."
+"když je povolena tato volba, tak lze bÄ›hem hry vidÄ›t navigaÄní meshe a "
+"polygony."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Synchronize Scene Changes"
msgstr "Synchronizovat změny scény"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, any changes made to the scene in the editor "
"will be replicated in the running project.\n"
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"Když je zapnuta tato možnost, všechny změny provedené ve scéně v editoru "
-"budou replikovány v běžící hře.\n"
-"Při použití se vzdáleným spuštěním je toto více efektivní při použití "
-"síťového souborového systému."
+"Je-li tato možnost vybrána, budou se všechny změny fáze v editoru opakovat, "
+"zatímco hra běží.\n"
+"Při vzdáleném použití na zařízení je tato možnost efektivnější, když je "
+"povolen síťový souborový systém."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Synchronize Script Changes"
-msgstr "Synchornizace změn skriptu"
+msgstr "Synchornizovat změny skriptu"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, any script that is saved will be reloaded in "
"the running project.\n"
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"Když je zapnuta tato volba, jakýkoliv skript, který je uložen bude znovu "
-"nahrán do spuštěné hry.\n"
-"Při použití se vzdáleným spuštěním je toto více efektivní při použití "
-"síťového souborového systému."
+"Pokud je tato možnost povolena, jakýkoli uložený skript se znovu naÄte, když "
+"je hra spuštěna.\n"
+"Při vzdáleném použití na zařízení je tato možnost efektivnější, když je "
+"povolen síťový souborový systém."
#: editor/editor_node.cpp editor/script_create_dialog.cpp
msgid "Editor"
@@ -2929,18 +2934,16 @@ msgid "Take Screenshot"
msgstr "Vytvořit snímek obrazovky"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Screenshots are stored in the Editor Data/Settings Folder."
-msgstr "Otevřít složku s daty a nastavením editoru"
+msgstr "Screenshoty jsou uložené v Editor Data/Settings Folder."
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
msgstr "Přepnout celou obrazovku"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Toggle System Console"
-msgstr "Přepnout režim rozdělení"
+msgstr "Zapnout/Vypnout systémovou konzoli"
#: editor/editor_node.cpp
msgid "Open Editor Data/Settings Folder"
@@ -2955,13 +2958,12 @@ msgid "Open Editor Settings Folder"
msgstr "Otevřít složku s nastavením editoru"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Manage Editor Features..."
-msgstr "Spravovat exportní šablony"
+msgstr "Spravovat funkce editoru..."
#: editor/editor_node.cpp
msgid "Manage Export Templates..."
-msgstr "Spravovat exportní šablony..."
+msgstr "Spravovat Å¡ablony exportu..."
#: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp
msgid "Help"
@@ -2990,7 +2992,7 @@ msgstr "Nahlásit chybu"
#: editor/editor_node.cpp
msgid "Send Docs Feedback"
-msgstr ""
+msgstr "Odeslat zpětnou vazbu dokumentace"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
@@ -3010,7 +3012,7 @@ msgstr "Hrát"
#: editor/editor_node.cpp
msgid "Pause the scene execution for debugging."
-msgstr ""
+msgstr "Pozastavit běh scény pro ladění."
#: editor/editor_node.cpp
msgid "Pause Scene"
@@ -3071,7 +3073,7 @@ msgstr "Inspektor"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr ""
+msgstr "Rozšířit spodní panel"
#: editor/editor_node.cpp
msgid "Output"
@@ -3084,6 +3086,7 @@ msgstr "Neukládat"
#: editor/editor_node.cpp
msgid "Android build template is missing, please install relevant templates."
msgstr ""
+"Chybí kompilaÄní Å¡ablona pro Android, prosím nainstalujte vhodnou Å¡ablonu."
#: editor/editor_node.cpp
msgid "Manage Templates"
@@ -3099,6 +3102,13 @@ msgid ""
"the \"Use Custom Build\" option should be enabled in the Android export "
"preset."
msgstr ""
+"Tato možnost připraví váš projekt na vaše vlastní sestavení pro Android "
+"instalací zdrojové šablony v \"res://android/build\".\n"
+"Poté můžete při exportu přidat úpravy a vytvořit si vlastní soubor APK "
+"(přidání modulů, změna souboru AndroidManifest.xml, atd.)\n"
+"Upozorňujeme, že pokud chcete vytvořit vlastní sestavení namísto použití "
+"připraveného souboru APK, měla by být v exportním profilu Androidu povolena "
+"možnost \"Použít vlastní sestavení\"."
#: editor/editor_node.cpp
msgid ""
@@ -3107,6 +3117,9 @@ msgid ""
"Remove the \"res://android/build\" directory manually before attempting this "
"operation again."
msgstr ""
+"KompilaÄní Å¡ablona pro Android je pro tento projekt již nainstalovaná a "
+"nebude přepsána.\n"
+"Odstraňte složku \"res://android/build\" před dalším pokusem o tuto operaci."
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
@@ -3174,7 +3187,7 @@ msgstr "Nebyly nalezeny žádné dílÄí zdroje."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
-msgstr ""
+msgstr "Vytváření náhledu modelu"
#: editor/editor_plugin.cpp
msgid "Thumbnail..."
@@ -3239,7 +3252,7 @@ msgstr "Inkluzivní"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr ""
+msgstr "Tento objekt"
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3259,7 +3272,7 @@ msgstr "Editovat text:"
#: editor/editor_properties.cpp editor/script_create_dialog.cpp
msgid "On"
-msgstr ""
+msgstr "Zapnout"
#: editor/editor_properties.cpp
msgid "Layer"
@@ -3304,6 +3317,10 @@ msgid ""
"Please switch on the 'local to scene' property on it (and all resources "
"containing it up to a node)."
msgstr ""
+"Na tomto zdroji nelze vytvořit ViewportTexture, protože není pro scénu "
+"lokální.\n"
+"Upravte jeho vlastnost \"lokální pro scénu\" (a všechny zdroje, které jej "
+"obsahují, až po uzel)."
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Pick a Viewport"
@@ -3314,9 +3331,8 @@ msgid "New Script"
msgstr "Nový skript"
#: editor/editor_properties.cpp editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Extend Script"
-msgstr "Otevřít skript"
+msgstr "Rozšířit skript"
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "New %s"
@@ -3374,7 +3390,6 @@ msgid "Add Key/Value Pair"
msgstr "Vložte pár klíÄ/hodnota"
#: editor/editor_run_native.cpp
-#, fuzzy
msgid ""
"No runnable export preset found for this platform.\n"
"Please add a runnable preset in the Export menu or define an existing preset "
@@ -3382,7 +3397,8 @@ msgid ""
msgstr ""
"Nebylo nalezeno žádné spustilené přednastavení pro exportování na tuto "
"platformu.\n"
-"Přidejte prosím spustitelné přednastavení v exportovacím menu."
+"Přidejte prosím spustitelné přednastavení v exportovacím menu nebo definujte "
+"existující přednastavení jako spustitelné."
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -3409,16 +3425,14 @@ msgid "Did you forget the '_run' method?"
msgstr "Nezapoměl jste metodu '_run'?"
#: editor/editor_spin_slider.cpp
-#, fuzzy
msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Podržte Ctrl k uvolnění getteru. Podržte Shift k uvolnění generického "
-"podpisu."
+"Podržte Ctrl pro zaokrouhlení na celá Äísla. Podržte Shift pro pÅ™esnÄ›jší "
+"úpravy."
#: editor/editor_sub_scene.cpp
-#, fuzzy
msgid "Select Node(s) to Import"
-msgstr "Vyberte uzly (Node) pro import"
+msgstr "Vyberte uzly pro import"
#: editor/editor_sub_scene.cpp editor/project_manager.cpp
msgid "Browse"
@@ -3451,7 +3465,7 @@ msgstr "Stáhnout"
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
-msgstr ""
+msgstr "Oficiální šablony exportu nejsou k dispozici pro vývojová sestavení."
#: editor/export_template_manager.cpp
msgid "(Missing)"
@@ -3499,7 +3513,7 @@ msgstr "Chyba při získávání seznamu zrcadel."
#: editor/export_template_manager.cpp
msgid "Error parsing JSON of mirror list. Please report this issue!"
-msgstr ""
+msgstr "Chyba parsování JSON mirror list. Prosím nahlaste tuto chybu!"
#: editor/export_template_manager.cpp
msgid ""
@@ -3604,9 +3618,8 @@ msgid "SSL Handshake Error"
msgstr "Selhání SSL handshaku"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uncompressing Android Build Sources"
-msgstr "Dekomprese uživatelského obsahu"
+msgstr "Dekomprese zdrojů sestavení pro Android"
#: editor/export_template_manager.cpp
msgid "Current Version:"
@@ -3630,7 +3643,7 @@ msgstr "Vybrat soubor Å¡ablony"
#: editor/export_template_manager.cpp
msgid "Godot Export Templates"
-msgstr "Exportní šablony Godotu"
+msgstr "Å ablony exportu Godotu"
#: editor/export_template_manager.cpp
msgid "Export Template Manager"
@@ -3708,7 +3721,7 @@ msgstr "Duplikace složky:"
#: editor/filesystem_dock.cpp
msgid "New Inherited Scene"
-msgstr "Nová odvozená scéna"
+msgstr "Nová zděděná scéna"
#: editor/filesystem_dock.cpp
msgid "Set As Main Scene"
@@ -3720,7 +3733,7 @@ msgstr "Otevřít scény"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr "Instance:"
+msgstr "Instance"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
@@ -3751,6 +3764,11 @@ msgid "Move To..."
msgstr "Přesunout do..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Přemístit Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nová scéna..."
@@ -3848,6 +3866,8 @@ msgid ""
"Include the files with the following extensions. Add or remove them in "
"ProjectSettings."
msgstr ""
+"Zahrnout soubory s následujícími příponami. Přidejte nebo odeberte je v "
+"Nastavení projektu."
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -3911,7 +3931,6 @@ msgid "Groups"
msgstr "Skupiny"
#: editor/groups_editor.cpp
-#, fuzzy
msgid "Nodes Not in Group"
msgstr "Uzly nejsou ve skupinÄ›"
@@ -3926,7 +3945,7 @@ msgstr "Uzly jsou ve skupinÄ›"
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
-msgstr ""
+msgstr "Prázdné skupiny budou automaticky odstraněny."
#: editor/groups_editor.cpp
msgid "Group Editor"
@@ -3938,43 +3957,43 @@ msgstr "Spravovat skupiny"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
-msgstr ""
+msgstr "Importovat jako jednu scénu"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr ""
+msgstr "Importovat s oddělenými animacemi"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr ""
+msgstr "Importovat s oddělenými materiály"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr ""
+msgstr "Importujte s oddělenými objekty"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr ""
+msgstr "Importujte s oddělenými objekty a materiály"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr ""
+msgstr "Importujte s oddělenými objekty a animacemi"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr ""
+msgstr "Importujte s oddělenými materiály a animacemi"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr ""
+msgstr "Importujte s oddělenými objekty, materiály a animacemi"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr ""
+msgstr "Importovat jako více scén"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr ""
+msgstr "Importovat jako více scén a materiálů"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -3987,18 +4006,17 @@ msgstr "Importuji scénu..."
#: editor/import/resource_importer_scene.cpp
msgid "Generating Lightmaps"
-msgstr ""
+msgstr "Generování světelné mapy"
#: editor/import/resource_importer_scene.cpp
msgid "Generating for Mesh: "
-msgstr ""
+msgstr "Generování pro síť: "
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
-msgstr ""
+msgstr "Spouštím skript..."
#: editor/import/resource_importer_scene.cpp
-#, fuzzy
msgid "Couldn't load post-import script:"
msgstr "NepodaÅ™ilo se naÄíst post-import script:"
@@ -4012,7 +4030,7 @@ msgstr "Chyba při spuštění post-import scriptu:"
#: editor/import/resource_importer_scene.cpp
msgid "Did you return a Node-derived object in the `post_import()` method?"
-msgstr ""
+msgstr "Vrátili jste objekt, který dědí z Node metodou `post_import()`?"
#: editor/import/resource_importer_scene.cpp
msgid "Saving..."
@@ -4035,9 +4053,8 @@ msgid "Import As:"
msgstr "Importovat jako:"
#: editor/import_dock.cpp
-#, fuzzy
msgid "Preset"
-msgstr "Předvolby"
+msgstr "Profil"
#: editor/import_dock.cpp
msgid "Reimport"
@@ -4045,17 +4062,18 @@ msgstr "Znovu importovat"
#: editor/import_dock.cpp
msgid "Save Scenes, Re-Import, and Restart"
-msgstr ""
+msgstr "Uložit scény, znovu importovat a restartovat"
#: editor/import_dock.cpp
-#, fuzzy
msgid "Changing the type of an imported file requires editor restart."
-msgstr "ZmÄ›na grafického ovladaÄe vyžaduje restart editoru."
+msgstr "Změna typu importovaného souboru vyžaduje restart editoru."
#: editor/import_dock.cpp
msgid ""
"WARNING: Assets exist that use this resource, they may stop loading properly."
msgstr ""
+"VAROVÃNÃ: Existují zdroje, který tento zdroj používají. Může se stát, že se "
+"pÅ™estanou správnÄ› naÄítat."
#: editor/inspector_dock.cpp
msgid "Failed to load resource."
@@ -4079,9 +4097,8 @@ msgid "Copy Params"
msgstr "Kopírovat parametry"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource Clipboard"
-msgstr "Schránka zdroje je prázdná!"
+msgstr "Editovat schránku zdrojů"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
@@ -4089,7 +4106,7 @@ msgstr "Kopírovat zdroj"
#: editor/inspector_dock.cpp
msgid "Make Built-In"
-msgstr ""
+msgstr "Vytvořit vestavěný"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4137,7 +4154,7 @@ msgstr "Změny mohou být ztraceny!"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr ""
+msgstr "MultiNode sada"
#: editor/node_dock.cpp
msgid "Select a single node to edit its signals and groups."
@@ -4230,17 +4247,16 @@ msgstr "NaÄíst..."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
-#, fuzzy
msgid "Move Node Point"
-msgstr "Přesunout body"
+msgstr "Přesunout body uzlů"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Limits"
-msgstr ""
+msgstr "Upravit hranice BlendSpace1D"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Labels"
-msgstr ""
+msgstr "Upravit popisky BlendSpace1D"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4250,24 +4266,21 @@ msgstr "Tento typ uzlu nelze použít. Jsou povoleny pouze kořenové uzly."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
-#, fuzzy
msgid "Add Node Point"
-msgstr "Přidat uzel"
+msgstr "Přidat bod uzlu"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
-#, fuzzy
msgid "Add Animation Point"
-msgstr "Přidat animaci"
+msgstr "Přidat bod animace"
#: editor/plugins/animation_blend_space_1d_editor.cpp
-#, fuzzy
msgid "Remove BlendSpace1D Point"
-msgstr "Odstranit bod cesty"
+msgstr "Odstranit bod BlendSpace1D"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Move BlendSpace1D Node Point"
-msgstr ""
+msgstr "Přesunout bod uzlu BlendSpace1D"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4277,11 +4290,14 @@ msgid ""
"AnimationTree is inactive.\n"
"Activate to enable playback, check node warnings if activation fails."
msgstr ""
+"AnimationTree je neaktviní.\n"
+"Aktivujte ho, aby zaÄlo pÅ™ehrávání. Pokud aktivace nefunguje, tak "
+"zkontrolujte varování uzlu."
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Set the blending position within the space"
-msgstr ""
+msgstr "Nastavit blending pozici v prostoru"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4321,34 +4337,31 @@ msgstr "Přidat trojúhelník"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Change BlendSpace2D Limits"
-msgstr ""
+msgstr "Upravit hranice BlendSpace2D"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Change BlendSpace2D Labels"
-msgstr ""
+msgstr "Upravit popisky BlendSpace2D"
#: editor/plugins/animation_blend_space_2d_editor.cpp
-#, fuzzy
msgid "Remove BlendSpace2D Point"
-msgstr "Odstranit bod cesty"
+msgstr "Odstranit bod BlendSpace2D"
#: editor/plugins/animation_blend_space_2d_editor.cpp
-#, fuzzy
msgid "Remove BlendSpace2D Triangle"
-msgstr "Odstranit proměnnou"
+msgstr "Odstranit BlendSpace2D trojúhelník"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "BlendSpace2D does not belong to an AnimationTree node."
-msgstr ""
+msgstr "BlendSpace2D nepatří k AnimationTree uzlu."
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "No triangles exist, so no blending can take place."
-msgstr ""
+msgstr "Neexistují žádné trojúhelníky, takže nemůže nastat žádný blending."
#: editor/plugins/animation_blend_space_2d_editor.cpp
-#, fuzzy
msgid "Toggle Auto Triangles"
-msgstr "Zobrazit oblíbené"
+msgstr "Zapnout/Vypnout automatické trojúhelníky"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Create triangles by connecting points."
@@ -4360,7 +4373,7 @@ msgstr "Odstranit body a trojúhelníky."
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Generate blend triangles automatically (instead of manually)"
-msgstr ""
+msgstr "Vygenerovat blend trojúhelníky automaticky (ne manuálně)"
#: editor/plugins/animation_blend_space_2d_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -4378,7 +4391,7 @@ msgstr "Editovat filtry"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Output node can't be added to the blend tree."
-msgstr ""
+msgstr "Výstupní uzly nemohou být přidané do blend stromu."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Add Node to BlendTree"
@@ -4414,7 +4427,7 @@ msgstr "Smazat uzel"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr "Odstranit uzel/uzly"
+msgstr "Odstranit uzly"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Toggle Filter On/Off"
@@ -4426,11 +4439,11 @@ msgstr "Změnit filtr"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "No animation player set, so unable to retrieve track names."
-msgstr ""
+msgstr "Není nastavený pÅ™ehrávaÄ animací, takže nelze získat jména stop."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Player path set is invalid, so unable to retrieve track names."
-msgstr ""
+msgstr "Cesta k pÅ™ehrávaÄi je nevalidní, takže nelze získat jména stop."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/root_motion_editor_plugin.cpp
@@ -4438,6 +4451,8 @@ msgid ""
"Animation player has no valid root node path, so unable to retrieve track "
"names."
msgstr ""
+"PÅ™ehrávaÄ animací nemá validní cestu ke koÅ™enovému uzlu, takže nelze získat "
+"jména stop."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Anim Clips"
@@ -4511,7 +4526,7 @@ msgstr "Přejmenovat animaci"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr ""
+msgstr "Upraveno prolnutí na další"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
@@ -4570,9 +4585,8 @@ msgid "Animation position (in seconds)."
msgstr "Pozice animace (v sekundách)."
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Scale animation playback globally for the node."
-msgstr "Škálovat playback animace globálně pro uzel"
+msgstr "Škálovat playback animace globálně pro uzel."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
@@ -4595,18 +4609,16 @@ msgid "Display list of animations in player."
msgstr "Zobrazit seznam animací v pÅ™ehrávaÄi."
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Autoplay on Load"
-msgstr "Autoplay pÅ™i naÄtení"
+msgstr "Auto-pÅ™ehrání pÅ™i naÄtení"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Enable Onion Skinning"
-msgstr ""
+msgstr "Povolit Onion Skinning"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Onion Skinning Options"
-msgstr "Možnosti přichytávání"
+msgstr "Onion Skinning možnosti"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Directions"
@@ -4642,16 +4654,15 @@ msgstr "Pouze rozdíly"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Force White Modulate"
-msgstr ""
+msgstr "Vynutit bílou modulaci"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Include Gizmos (3D)"
-msgstr ""
+msgstr "Zahrnout Gizmos (3D)"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Pin AnimationPlayer"
-msgstr "Vložit animaci"
+msgstr "Připnout AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
@@ -4670,7 +4681,7 @@ msgstr "Chyba!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr ""
+msgstr "Blend Äasy:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
@@ -4678,7 +4689,7 @@ msgstr "Další (Automatická řada):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr ""
+msgstr "PÅ™echodové Äasy prolnutí animací"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Move Node"
@@ -4703,7 +4714,7 @@ msgstr "Konec"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Immediate"
-msgstr ""
+msgstr "Okamžité"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Sync"
@@ -4711,7 +4722,7 @@ msgstr "Synchronizovat"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "At End"
-msgstr ""
+msgstr "Na konci"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Travel"
@@ -4719,12 +4730,11 @@ msgstr "Cestovat"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Start and end nodes are needed for a sub-transition."
-msgstr ""
+msgstr "Pro pod-pÅ™echod jsou potÅ™eba zaÄáteÄní a koncové uzly."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "No playback resource set at path: %s."
-msgstr "Není v cestě ke zdroji."
+msgstr "Na cestě nebyl nalezen žádný zdrojový playback: %s."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Removed"
@@ -4736,7 +4746,7 @@ msgstr "Přechod odebrán"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set Start Node (Autoplay)"
-msgstr ""
+msgstr "Nastavit poÄáteÄní uzel (Autoplay)"
#: editor/plugins/animation_state_machine_editor.cpp
msgid ""
@@ -4744,6 +4754,9 @@ msgid ""
"RMB to add new nodes.\n"
"Shift+LMB to create connections."
msgstr ""
+"Vyberte a přesuňte uzly.\n"
+"PTM pro přidání nových uzlů.\n"
+"Shift + LTM pro vytváření spojení."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Create new nodes."
@@ -4760,10 +4773,12 @@ msgstr "Odstranit vybraný uzel nebo přechod."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Toggle autoplay this animation on start, restart or seek to zero."
msgstr ""
+"Přepnout automatické přehrávání této animace při spuštění, restartování nebo "
+"pÅ™etoÄení zpÄ›t na nulu."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set the end animation. This is useful for sub-transitions."
-msgstr ""
+msgstr "Nastavit koncovou animaci. UžiteÄné pro pod-pÅ™echody."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition: "
@@ -4788,25 +4803,24 @@ msgid "Scale:"
msgstr "Zvětšení:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
-#, fuzzy
msgid "Fade In (s):"
-msgstr "Zmizení do (s):"
+msgstr "Objevení za (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr ""
+msgstr "Zmizení za (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "Prolnutí"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Mix"
-msgstr ""
+msgstr "Mix"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr ""
+msgstr "Auto-restart:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Restart (s):"
@@ -4835,7 +4849,7 @@ msgstr "Prolínání 1:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr ""
+msgstr "X-Fade Äas (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Current:"
@@ -4853,7 +4867,7 @@ msgstr "Čistý Auto-Advance"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "Nastavit auto-krok"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Delete Input"
@@ -4909,7 +4923,7 @@ msgstr "Importovat animace..."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "Editovat filtry uzlů"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Filters..."
@@ -4953,14 +4967,13 @@ msgstr "OdpovÄ›Ä nelze uložit na:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Write error."
-msgstr ""
+msgstr "Chyba zápisu."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
msgstr "Požadavek se nezdařil, příliš mnoho přesměrování"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Redirect loop."
msgstr "Zacyklené přesměrování."
@@ -4969,9 +4982,8 @@ msgid "Request failed, timeout"
msgstr "Požadavek selhal, vyprÅ¡el Äasový limit"
#: editor/plugins/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Timeout."
-msgstr "ÄŒas"
+msgstr "Čas vypršel."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
@@ -5031,11 +5043,11 @@ msgstr "Stahování tohoto assetu právě probíhá!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
-msgstr ""
+msgstr "Naposledy upravené"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Least Recently Updated"
-msgstr ""
+msgstr "Naposledy neupravené"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (A-Z)"
@@ -5087,7 +5099,7 @@ msgstr "Pluginy..."
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Sort:"
-msgstr "Řadit:"
+msgstr "Řadit podle:"
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_settings_editor.cpp
@@ -5124,16 +5136,23 @@ msgid ""
"Save your scene (for images to be saved in the same dir), or pick a save "
"path from the BakedLightmap properties."
msgstr ""
+"Nelze urÄit cestu uložení pro svÄ›telnou mapu obrázku.\n"
+"Uložte scénu (obrázky se uloží do stejného adresáře) nebo vyberte cestu pro "
+"uložení z vlastnosti BakedLightmap."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake "
"Light' flag is on."
msgstr ""
+"Žádné sítÄ› k zapeÄení. UjistÄ›te se, že obsahují kanál UV2 a že je nastaven "
+"příznak \"Zapéct světlo\"."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
msgstr ""
+"Při vytváření ligtmap došlo k chybě, ujistěte se, že cesta není pouze pro "
+"Ätení."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Bake Lightmaps"
@@ -5146,7 +5165,7 @@ msgstr "Náhled"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
-msgstr "Nastavení přichycování"
+msgstr "Nastavení přichycení"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Offset:"
@@ -5158,7 +5177,7 @@ msgstr "Krok mřížky:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Primary Line Every:"
-msgstr ""
+msgstr "Hlavní řádek každý:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "steps"
@@ -5173,9 +5192,8 @@ msgid "Rotation Step:"
msgstr "Krok rotace:"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale Step:"
-msgstr "Zvětšení:"
+msgstr "Krok škálování:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Vertical Guide"
@@ -5207,66 +5225,63 @@ msgstr "Vytvořit vodorovná a svislá vodítka"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Nastavit CanvasItem \"%s\" offset pivota na (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "Rotovat CanvasItem"
+msgstr "Rotovat %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Rotovat CanvasItem"
+msgstr "Rotovat CanvasItem \"%s\" na %d stupňů"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "Přemístit CanvasItem"
+msgstr "Přemístit CanvasItem \"%s\" kotva"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Škálovat Node2D \"%s\" na (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Škálovat Control \"%s\" na (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "Škálovat CanvasItem"
+msgstr "Škálovat %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "Škálovat CanvasItem"
+msgstr "Škálovat CanvasItem \"%s\" na (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "Přemístit CanvasItem"
+msgstr "Přemístit %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "Přemístit CanvasItem"
+msgstr "Přemístit CanvasItem \"%s\" na (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Children of containers have their anchors and margins values overridden by "
"their parent."
msgstr ""
+"Hodnoty ukotvení a okrajů potomků uzlů kontejnerů jsou přepsány jejich "
+"rodiÄem."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Presets for the anchors and margins values of a Control node."
-msgstr ""
+msgstr "Přednastavení pro hodnoty ukotvení a okrajů Control ulzu."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"When active, moving Control nodes changes their anchors instead of their "
"margins."
msgstr ""
+"Když je aktivní, pohybující se Control uzly mění svoje ukotvení, namísto "
+"jejich okrajů."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Left"
@@ -5302,43 +5317,39 @@ msgstr "Uprostřed dole"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center"
-msgstr ""
+msgstr "Uprostřed"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Left Wide"
-msgstr "Pohled zleva"
+msgstr "Vlevo po celé výšce"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Top Wide"
-msgstr "Pohled shora"
+msgstr "Nahoře po celé šířce"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Right Wide"
-msgstr "Pohled zprava"
+msgstr "Vpravo po celé výšce"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Wide"
-msgstr "Pohled zdola"
+msgstr "Dole po celé šířce"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "VCenter Wide"
-msgstr ""
+msgstr "Uprostřed po celé výšce"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "HCenter Wide"
-msgstr ""
+msgstr "Uprostřed po celé šířce"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Full Rect"
-msgstr ""
+msgstr "Celý obdélník"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Keep Ratio"
-msgstr "Ponechat poměr"
+msgstr "Zachovat poměr"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchors only"
@@ -5358,6 +5369,8 @@ msgid ""
"Game Camera Override\n"
"Overrides game camera with editor viewport camera."
msgstr ""
+"Přepsat herní kameru\n"
+"Herní kamera se nahradí kamerou z pohledu editoru."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5365,6 +5378,8 @@ msgid ""
"Game Camera Override\n"
"No game instance running."
msgstr ""
+"Přepsat herní kameru\n"
+"Není spuštěna žádná instance hry."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5378,28 +5393,25 @@ msgstr "OdemÄít vybraný"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Group Selected"
-msgstr "Kopírovat výběr"
+msgstr "Seskupit vybrané"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Ungroup Selected"
-msgstr "Kopírovat výběr"
+msgstr "Odskupit vybrané"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
-msgstr ""
+msgstr "Vložit pózu"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Guides"
msgstr "Vymazat vodítka"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Create Custom Bone(s) from Node(s)"
-msgstr "Vytvořit ze scény"
+msgstr "Vytvořit vlastní kosti z uzlů"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
@@ -5407,17 +5419,19 @@ msgstr "Vymazat kosti"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr ""
+msgstr "Vytvořit IK řetěz"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr ""
+msgstr "Zrušit IK řetěz"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"Warning: Children of a container get their position and size determined only "
"by their parent."
msgstr ""
+"Varování: Pozici a velikost potomků kontejneru nastavuje pouze jejich "
+"nadřazený prvek."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/texture_region_editor_plugin.cpp
@@ -5441,11 +5455,12 @@ msgstr "Alt+Táhnutí: Přemístit"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
msgstr ""
+"Stisknutím klávesy \"V\" se upraví pivot, stisknutím kláves \"Shift+V\" se "
+"posune pivot (při pohybu)."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Depth list selection"
-msgstr "Alt+Pravé tlaÄíko myÅ¡i:"
+msgstr "Alt+PTM: Výběr hloubkového seznamu"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5468,63 +5483,60 @@ msgid ""
"Show a list of all objects at the position clicked\n"
"(same as Alt+RMB in select mode)."
msgstr ""
+"Zobrazit seznam objektů v bodě kliknutí\n"
+"(stejné jako Alt+PTM v režimu výběru)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr ""
+msgstr "Kliknutím zmÄ›níte stÅ™ed otáÄení objektu."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
-msgstr ""
+msgstr "Režim posouvání"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Ruler Mode"
msgstr "Režim pravítka"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggle smart snapping."
-msgstr "Přepnout přichycování."
+msgstr "Přepnout chytré přichytávání."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Smart Snap"
-msgstr "Použít chytré přichycování"
+msgstr "Použít chytré přichytávání"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Toggle grid snapping."
-msgstr "Přepnout přichycování."
+msgstr "Přepnout mřížkové přichytávání."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Use Grid Snap"
-msgstr "Použít přichycování"
+msgstr "Použít mřížkové přichytávání"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snapping Options"
-msgstr "Možnosti přichytávání"
+msgstr "Možnosti přichycení"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "Použít rotaÄní pÅ™ichytávání"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Use Scale Snap"
-msgstr "Použít přichycování"
+msgstr "Použít škálovací přichytávání"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
-msgstr ""
+msgstr "Přichytávat relativně"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr ""
+msgstr "Přichytávat na pixely"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Smart Snapping"
-msgstr "Chytré přichytávání"
+msgstr "Chytré přichcování"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5532,39 +5544,33 @@ msgid "Configure Snap..."
msgstr "Nastavení přichytávání..."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to Parent"
msgstr "PÅ™ichytit k rodiÄovi"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to Node Anchor"
-msgstr "Přichytit ke středu uzlu"
+msgstr "Přichytit k ukotvení uzlu"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to Node Sides"
msgstr "Přichytit ke stranám uzlu"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to Node Center"
msgstr "Přichytit ke středu uzlu"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to Other Nodes"
msgstr "Přichytit k jiným uzlům"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Snap to Guides"
msgstr "Přichytit k vodítkům"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr "UzamÄít vybraný objekt na místÄ› (nemůže být pÅ™esunut)."
+msgstr "Uzamknout vybraný objekt na místě (nemůže být přesunut)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5574,12 +5580,12 @@ msgstr "Uvolnit vybraný objekt (může být přesunut)."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr ""
+msgstr "Zajistí, aby nebylo možné vybrat potomky objektu."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr ""
+msgstr "Obnoví, aby bylo možné vybrat potomky objektu."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -5591,10 +5597,9 @@ msgstr "Zobrazit kosti"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Custom Bone(s) from Node(s)"
-msgstr ""
+msgstr "Vytvořit kosti z uzlů"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Clear Custom Bones"
msgstr "Vymazat kosti"
@@ -5604,9 +5609,8 @@ msgid "View"
msgstr "Zobrazení"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Always Show Grid"
-msgstr "Zobrazit mřížku"
+msgstr "Vždy zobrazit mřížku"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Helpers"
@@ -5630,7 +5634,7 @@ msgstr "Zobrazit Viewport"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Show Group And Lock Icons"
-msgstr ""
+msgstr "Zobrazit ikony skupiny a zámku"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -5642,24 +5646,23 @@ msgstr "Výběr snímku"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
-msgstr ""
+msgstr "Náhled měřítka plátna"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Translation mask for inserting keys."
-msgstr ""
+msgstr "Offset maska pro vkládání klíÄů."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation mask for inserting keys."
-msgstr ""
+msgstr "RotaÄní maska pro vkládání klíÄů."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale mask for inserting keys."
-msgstr ""
+msgstr "Å kálovací maska pro vkládání klíÄů."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Insert keys (based on mask)."
-msgstr "Vložit klÃ­Ä (existující stopy)"
+msgstr "Vložit klÃ­Ä (založený na masce)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5668,16 +5671,19 @@ msgid ""
"Keys are only added to existing tracks, no new tracks will be created.\n"
"Keys must be inserted manually for the first time."
msgstr ""
+"Automaticky vkládat klíÄe, když je objekt pÅ™esunut, otoÄen nebo zmenÅ¡en (na "
+"základě masky).\n"
+"KlíÄe se pÅ™idávají pouze ke stávajícím cestám, žádné nové cesty se "
+"nevytvoří.\n"
+"Poprvé musí být klíÄe vloženy ruÄnÄ›."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Auto Insert Key"
-msgstr "Animace: vložit klíÄ"
+msgstr "Automaticky vložit klíÄ"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Animation Key and Pose Options"
-msgstr "AnimaÄní klÃ­Ä vložen."
+msgstr "AnimaÄní klÃ­Ä a možnosti pozice"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
@@ -5693,16 +5699,15 @@ msgstr "Vymazat pózu"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr ""
+msgstr "Vynásobit krok mřížky dvěma"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr ""
+msgstr "Vydělit krok mřížky dvěma"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Pan View"
-msgstr "Pohled zezadu"
+msgstr "Přesunout pohled"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -5714,7 +5719,7 @@ msgstr "Přidávám %s..."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Cannot instantiate multiple nodes without root."
-msgstr ""
+msgstr "Bez kořenového uzlu nelze vytvořit více uzlů."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -5727,7 +5732,6 @@ msgid "Error instancing scene from %s"
msgstr "Chyba instancování scény z %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Change Default Type"
msgstr "Změnit výchozí typ"
@@ -5736,6 +5740,8 @@ msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
+"Přetažení + Shift: Přidat uzel jako souseda\n"
+"Přetažení + Alt: Změnit typu uzlu"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Polygon3D"
@@ -5751,7 +5757,7 @@ msgstr "Upravit polygon (Odstranit bod)"
#: editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
-msgstr ""
+msgstr "Nastavit úchyt"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5762,9 +5768,8 @@ msgstr "NaÄíst emisní masku"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "Restart"
-msgstr "Restartovat nyní"
+msgstr "Restartovat"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5790,28 +5795,27 @@ msgstr "Emisní maska"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Solid Pixels"
-msgstr ""
+msgstr "Pevné pixely"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Border Pixels"
-msgstr ""
+msgstr "HraniÄní pixely"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Directed Border Pixels"
-msgstr "Složky a soubory:"
+msgstr "Pixely ohraniÄení"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Capture from Pixel"
-msgstr ""
+msgstr "Snímání z pixelu"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Colors"
-msgstr ""
+msgstr "Emisní barvy"
#: editor/plugins/cpu_particles_editor_plugin.cpp
msgid "CPUParticles"
@@ -5820,46 +5824,44 @@ msgstr "CPUParticles (Äástice)"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Mesh"
-msgstr ""
+msgstr "Vytvořit emisní body ze sítě"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Node"
-msgstr ""
+msgstr "Vytvořit emisní body z uzlu"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Flat 0"
-msgstr "Flat0"
+msgstr "Plocha 0"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Flat 1"
-msgstr "Flat1"
+msgstr "Plocha 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
-msgstr ""
+msgstr "Pozvolný vchod"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease Out"
-msgstr ""
+msgstr "Pozvolný odchod"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Smoothstep"
-msgstr ""
+msgstr "Plynulý krok"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Point"
-msgstr ""
+msgstr "Upravit bod křivky"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Modify Curve Tangent"
-msgstr ""
+msgstr "Upravit teÄnu kÅ™ivky"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Load Curve Preset"
-msgstr ""
+msgstr "NaÄíst pÅ™eddefinovanou kÅ™ivku"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Add Point"
@@ -5870,19 +5872,16 @@ msgid "Remove Point"
msgstr "Odstranit bod"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Left Linear"
-msgstr "Lineární"
+msgstr "Levé lineární"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Right Linear"
-msgstr "Pohled zprava"
+msgstr "Pravé lineární"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Load Preset"
-msgstr "NaÄíst preset"
+msgstr "NaÄíst pÅ™ednastavení"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Remove Curve Point"
@@ -5890,24 +5889,23 @@ msgstr "Odstranit bod křivky"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr ""
+msgstr "PÅ™epne lineární teÄnu kÅ™ivky"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
-msgstr ""
+msgstr "Podržením Shift zmÄ›níte teÄny jednotlivÄ›"
#: editor/plugins/curve_editor_plugin.cpp
-#, fuzzy
msgid "Right click to add point"
-msgstr "Pravý klik: Smazat bod"
+msgstr "Pravý klik pro přidání bodu"
#: editor/plugins/gi_probe_editor_plugin.cpp
msgid "Bake GI Probe"
-msgstr ""
+msgstr "Zapéct GI probe"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Gradient Edited"
-msgstr ""
+msgstr "Gradient upraven"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
@@ -5930,49 +5928,44 @@ msgid "Mesh is empty!"
msgstr "Mesh je prázdný!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Couldn't create a Trimesh collision shape."
-msgstr "Nelze vytvořit složku."
+msgstr "Vytvoření Trimesh kolizního tvaru se nezdařilo."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr ""
+msgstr "Vytvořit statické Trimesh Body"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
msgstr "Toto v kořenu scény nefunguje!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Trimesh Static Shape"
-msgstr "Vytvořit Trimesh Shape"
+msgstr "Vytvořit statický Trimesh tvar"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create a single convex collision shape for the scene root."
-msgstr ""
+msgstr "Pro kořen scény nelze vytvořit jediný konvexní kolizní tvar."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a single convex collision shape."
-msgstr ""
+msgstr "Vytvoření jediného konvexního kolizního tvaru se nezdařilo."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Single Convex Shape"
-msgstr "Vytvořit Convex Shape"
+msgstr "Vytvořit jediný konvexní tvar"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create multiple convex collision shapes for the scene root."
-msgstr ""
+msgstr "Pro kořen scény nelze vytvořit více konvexních tvarů kolize."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Couldn't create any collision shapes."
-msgstr "Nelze vytvořit složku."
+msgstr "Nelze vytvořit žádný z konvexních tvarů kolize."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Multiple Convex Shapes"
-msgstr "Vytvořit Convex Shape"
+msgstr "Vytvořit více konvexních tvarů kolize"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
@@ -5984,7 +5977,7 @@ msgstr "Obsažená mesh není typu ArrayMesh."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "UV Unwrap failed, mesh may not be manifold?"
-msgstr ""
+msgstr "Rozbalení UV se nezdařilo, možná je nesprávně síť?"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "No mesh to debug."
@@ -6004,7 +5997,7 @@ msgstr "Mesh némá povrch z jakého vytvořit obrysy!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!"
-msgstr ""
+msgstr "Typ primitivní sítě není PRIMITIVE_TRIANGLES!"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
@@ -6020,7 +6013,7 @@ msgstr "Mesh"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
-msgstr ""
+msgstr "Vytvořit statické Trimesh tělo"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6028,42 +6021,49 @@ msgid ""
"automatically.\n"
"This is the most accurate (but slowest) option for collision detection."
msgstr ""
+"Vytvoří uzel StaticBody a automaticky mu přiřadí kolizní tvar na základě "
+"polygonu.\n"
+"Toto je nejpřesnější (ale nejpomalejší) možnost detekce kolizí."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Collision Sibling"
-msgstr ""
+msgstr "Vytvořit sourozence Trimesh kolize"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
"Creates a polygon-based collision shape.\n"
"This is the most accurate (but slowest) option for collision detection."
msgstr ""
+"Vytvoří polygonový kolizní tvar.\n"
+"Toto je nejpřesnější (ale nejpomalejší) možnost detekce kolizí."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Single Convex Collision Sibling"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Vytvořit jediného konvexního kolizního sourozence"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
"Creates a single convex collision shape.\n"
"This is the fastest (but least accurate) option for collision detection."
msgstr ""
+"Vytvoří jeden konvexní kolizní tvar.\n"
+"Toto je nejrychlejší (ale nejméně přesná) možnost detekce kolizí."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Multiple Convex Collision Siblings"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Vytvořit více konvexních kolizních sourozenců"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between the two above options."
msgstr ""
+"Vytvoří polygonový kolizní tvar.\n"
+"Toto je kompromis výkonu a přesnosti z dvou možností uvedených výše."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
-msgstr ""
+msgstr "Vytvořit obrysovou mřížku..."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6072,6 +6072,10 @@ msgid ""
"This can be used instead of the SpatialMaterial Grow property when using "
"that property isn't possible."
msgstr ""
+"Vytvoří statickou obrysovou síť. Obrysové síťi se automaticky převrátí "
+"normály.\n"
+"To lze použít namísto vlastnosti Grow ve SpatialMaterial, když vlastnost "
+"Grow nelze použít."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "View UV1"
@@ -6086,9 +6090,8 @@ msgid "Unwrap UV2 for Lightmap/AO"
msgstr "Rozbalit UV2 pro Lightmapu/AO"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Outline Mesh"
-msgstr "Vytvořit mesh obrysu"
+msgstr "Vytvořit síť obrysu"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Outline Size:"
@@ -6096,7 +6099,7 @@ msgstr "Velikost obrysu:"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "UV Channel Debug"
-msgstr ""
+msgstr "Ladění UV kanálu"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove item %d?"
@@ -6111,9 +6114,8 @@ msgstr ""
"%s"
#: editor/plugins/mesh_library_editor_plugin.cpp
-#, fuzzy
msgid "Mesh Library"
-msgstr "MeshLibrary..."
+msgstr "Knihovna síťí"
#: editor/plugins/mesh_library_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp
@@ -6155,31 +6157,31 @@ msgstr "Zdroj meshe je neplatný (neobsahuje žádný Mesh zdroj)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No surface source specified."
-msgstr ""
+msgstr "Zdroj povrchu není nastaven."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (invalid path)."
-msgstr ""
+msgstr "Zdroj povrchu je neplatný (neplatná cesta)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no geometry)."
-msgstr ""
+msgstr "Zdroj povrchu je neplatný (žádná geometrie)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no faces)."
-msgstr ""
+msgstr "Povrch je neplatný (žádné stěny)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
-msgstr ""
+msgstr "Vyberte zdrojovou síť:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Target Surface:"
-msgstr ""
+msgstr "Vyberte cílový povrch:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
-msgstr ""
+msgstr "Zaplnit povrch"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate MultiMesh"
@@ -6207,7 +6209,7 @@ msgstr "Osa Z"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh Up Axis:"
-msgstr ""
+msgstr "Osa mřížky nahoru:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Rotation:"
@@ -6236,17 +6238,16 @@ msgid "Convert to CPUParticles"
msgstr "Převést na CPUParticles"
#: editor/plugins/particles_2d_editor_plugin.cpp
-#, fuzzy
msgid "Generating Visibility Rect"
-msgstr "Generování C# projektu..."
+msgstr "Generování obdélníku viditelnosti"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generate Visibility Rect"
-msgstr ""
+msgstr "Vygenerovat obdélník viditelnosti"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr ""
+msgstr "Bod lze vložit pouze do process materiálu ParticlesMaterial"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
@@ -6255,60 +6256,59 @@ msgstr "Čas generování (sec):"
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry's faces don't contain any area."
-msgstr ""
+msgstr "Stěny geometrie neobsahují žádnou oblast."
#: editor/plugins/particles_editor_plugin.cpp
-#, fuzzy
msgid "The geometry doesn't contain any faces."
-msgstr "Scéna neobsahuje žádný skript."
+msgstr "Geometrie neobsahuje žádné stěny."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't inherit from Spatial."
-msgstr ""
+msgstr "\"%s\" nedědí ze Spatial."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't contain geometry."
-msgstr ""
+msgstr "\"%s\" neobsahuje geometrii."
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't contain face geometry."
-msgstr ""
+msgstr "\"%s\" neobsahuje geometrii stěn."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter"
-msgstr ""
+msgstr "Vytvořit Emitter"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Points:"
-msgstr ""
+msgstr "Emisní body:"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points"
-msgstr ""
+msgstr "Povrchové body"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
-msgstr ""
+msgstr "Povrchové body+Normály (orientované)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
-msgstr ""
+msgstr "Hlasitost"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Source: "
-msgstr ""
+msgstr "Zdroje emisí: "
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr ""
+msgstr "Je vyžadován materiál pro typ \"ParticlesMaterial\"."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generating AABB"
-msgstr ""
+msgstr "Generování AABB"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generate Visibility AABB"
-msgstr ""
+msgstr "Generovat viditelnostní AABB"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generate AABB"
@@ -6320,11 +6320,11 @@ msgstr "Odstranit bod z křivky"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Out-Control from Curve"
-msgstr ""
+msgstr "Odstranit odchozí kontrolní bod křivky"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove In-Control from Curve"
-msgstr ""
+msgstr "Odstranit příchozí kontrolní bod křivky"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6341,11 +6341,11 @@ msgstr "Přesunout bod v křivce"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Move In-Control in Curve"
-msgstr ""
+msgstr "Odstranit vnitřní kontrolní bod křivky"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Move Out-Control in Curve"
-msgstr ""
+msgstr "Přesunout odchozí kontrolní bod křivky"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6354,9 +6354,8 @@ msgstr "Vybrat body"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Táhnutí:"
+msgstr "Shift+Táhnutí: Vybrat kontrolní body"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6374,12 +6373,12 @@ msgstr "Pravý klik: Smazat bod"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
-msgstr ""
+msgstr "Vybrat kontrolní body křivky (Shift+Drag)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Add Point (in empty space)"
-msgstr ""
+msgstr "Přidat bod (na prázdném místě)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6400,12 +6399,12 @@ msgstr "Možnosti"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Mirror Handle Angles"
-msgstr ""
+msgstr "Zrcadlit úhly úchytů"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Mirror Handle Lengths"
-msgstr ""
+msgstr "Zrcadlit délku úchytů"
#: editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
@@ -6417,12 +6416,11 @@ msgstr "Nastavit pozici bodu křivky"
#: editor/plugins/path_editor_plugin.cpp
msgid "Set Curve In Position"
-msgstr "Nastavit křivku na pozici"
+msgstr "Nastavit bod do křivky"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Set Curve Out Position"
-msgstr "Odstranit signál"
+msgstr "Nastavit bod z křivky"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
@@ -6433,27 +6431,25 @@ msgid "Remove Path Point"
msgstr "Odstranit bod cesty"
#: editor/plugins/path_editor_plugin.cpp
-#, fuzzy
msgid "Remove Out-Control Point"
-msgstr "Odstranit funkci"
+msgstr "Odebrat výstupní kontrolní body"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove In-Control Point"
-msgstr ""
+msgstr "Odebrat vstupní kontrolní body"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
msgstr "Rozdělit segment (v křivce)"
#: editor/plugins/physical_bone_plugin.cpp
-#, fuzzy
msgid "Move Joint"
-msgstr "Přesunout bod"
+msgstr "Přesunout kloub"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"The skeleton property of the Polygon2D does not point to a Skeleton2D node"
-msgstr ""
+msgstr "Vlastnost kostry v Polygon2D neukazuje na Skeleton2D uzel"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Sync Bones"
@@ -6464,6 +6460,8 @@ msgid ""
"No texture in this polygon.\n"
"Set a texture to be able to edit UV."
msgstr ""
+"Tento polygon nemá textury.\n"
+"Nastav texturu aby se dalo editovat UV."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
@@ -6473,7 +6471,7 @@ msgstr "Vytvořit UV mapu"
msgid ""
"Polygon 2D has internal vertices, so it can no longer be edited in the "
"viewport."
-msgstr ""
+msgstr "Polygon 2D má vnitřní vrcholy, a proto nelze editovat ve viewport."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
@@ -6509,16 +6507,15 @@ msgstr "Transformovat polygon"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint Bone Weights"
-msgstr ""
+msgstr "Změnit hmotnost kostí"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Open Polygon 2D UV editor."
-msgstr "Otevřít 2D editor"
+msgstr "Otevřít editor 2D UV polygonu."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon 2D UV Editor"
-msgstr ""
+msgstr "Polygon 2D UV Editor"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "UV"
@@ -6541,18 +6538,16 @@ msgid "Move Points"
msgstr "Přesunout body"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Táhnutí: OtoÄit"
+msgstr "Příkaz: OtoÄit"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: Přesunout vše"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl: Změnit měřítko"
+msgstr "Shift+Příkaz: Škálovat"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6588,25 +6583,23 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint weights with specified intensity."
-msgstr ""
+msgstr "Změnit hmotnost se zadanou intenzitou."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Unpaint weights with specified intensity."
-msgstr ""
+msgstr "Odebrat hmotnost se zadanou intnzitou."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Radius:"
msgstr "Poloměr:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Vytvořit polygon a UV"
+msgstr "Kopírovat polygon do UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Přesunout polygon"
+msgstr "Kopírovat UV do polygonu"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -6653,9 +6646,8 @@ msgid "Grid Step Y:"
msgstr "Krok mřížky Y:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Sync Bones to Polygon"
-msgstr "Změnit měřítko mnohoúhelníku"
+msgstr "Synchronizovat kosti do polygonu"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
@@ -6685,7 +6677,7 @@ msgstr "Vložit zdroj"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/scene_tree_editor.cpp
msgid "Instance:"
-msgstr "Instance"
+msgstr "Instance:"
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
@@ -6765,20 +6757,22 @@ msgstr "Uložit soubor jako..."
#: editor/plugins/script_editor_plugin.cpp
msgid "Can't obtain the script for running."
-msgstr ""
+msgstr "Neexistuje žádný skript ke spuštění."
#: editor/plugins/script_editor_plugin.cpp
msgid "Script failed reloading, check console for errors."
-msgstr ""
+msgstr "NaÄtení skriptu se nezdaÅ™ilo, zkontrolujte chyby v konzoli."
#: editor/plugins/script_editor_plugin.cpp
msgid "Script is not in tool mode, will not be able to run."
-msgstr ""
+msgstr "Skript není v režimu nástroje, nelze jej spustit."
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"To run this script, it must inherit EditorScript and be set to tool mode."
msgstr ""
+"Chcete-li spustit tento skript, musí zdědit EditorScript a musí být nastaven "
+"do režimu editoru."
#: editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
@@ -6983,9 +6977,8 @@ msgid "Clear Recent Scripts"
msgstr "Vymazat nedávné skripty"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Connections to method:"
-msgstr "Připojit k uzlu:"
+msgstr "Připojení k metodě:"
#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp
msgid "Source"
@@ -6993,18 +6986,16 @@ msgstr "Zdroj"
#: editor/plugins/script_text_editor.cpp
msgid "Target"
-msgstr ""
+msgstr "Cíl"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid ""
"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."
-msgstr "Odpojit '%s' od '%s'"
+msgstr "Chybí metoda '%s' napojená na signál '%s' z uzlu '%s' do uzlu '%s'."
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "[Ignore]"
-msgstr "(ignorovat)"
+msgstr "[Ignorovat]"
#: editor/plugins/script_text_editor.cpp
msgid "Line"
@@ -7016,16 +7007,16 @@ msgstr "Přejít na funkci"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr ""
+msgstr "Sem lze přesunout pouze zdroje ze souborového systému."
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't drop nodes because script '%s' is not used in this scene."
-msgstr ""
+msgstr "Nelze zrušit uzly, protože skript \"%s\" se v této scéně nepoužívá."
#: editor/plugins/script_text_editor.cpp
msgid "Lookup Symbol"
-msgstr ""
+msgstr "Vyhledat symbol"
#: editor/plugins/script_text_editor.cpp
msgid "Pick Color"
@@ -7054,17 +7045,16 @@ msgstr "ZvýrazňovaÄ syntaxe"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
msgid "Bookmarks"
-msgstr ""
+msgstr "Záložky"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Breakpoints"
-msgstr "Vytvořit body."
+msgstr "Breakpointy"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
msgid "Go To"
-msgstr ""
+msgstr "Jít do"
#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
@@ -7106,16 +7096,15 @@ msgstr "Rozložit všechny řádky"
#: editor/plugins/script_text_editor.cpp
msgid "Clone Down"
-msgstr ""
+msgstr "Duplikovat dolů"
#: editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
-msgstr ""
+msgstr "Kompletní symbol"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Evaluate Selection"
-msgstr "Změnit měřítko výběru"
+msgstr "Vyhodnoť vybraný výraz"
#: editor/plugins/script_text_editor.cpp
msgid "Trim Trailing Whitespace"
@@ -7142,24 +7131,20 @@ msgid "Contextual Help"
msgstr "Kontextová nápověda"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Toggle Bookmark"
-msgstr "Přepnout volný pohled"
+msgstr "Vypnout/Zapnout záložku"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Next Bookmark"
-msgstr "Přejít na další breakpoint"
+msgstr "Přejít na další záložku"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Go to Previous Bookmark"
-msgstr "Přejít na předchozí breakpoint"
+msgstr "Přejít na předchozí záložku"
#: editor/plugins/script_text_editor.cpp
-#, fuzzy
msgid "Remove All Bookmarks"
-msgstr "Odstranit všechny položky"
+msgstr "Odstranit všechny zálóžky"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Function..."
@@ -7200,16 +7185,15 @@ msgstr "Shader"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "This skeleton has no bones, create some children Bone2D nodes."
-msgstr ""
+msgstr "Kostra nemá žádné kosti, vytvoř nějaké potomky Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Create Rest Pose from Bones"
-msgstr "Vytvořit ze scény"
+msgstr "Vytvořit klidovou pózu z kostí"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
-msgstr ""
+msgstr "Nastavit kosti podle klidové pózy"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
@@ -7217,11 +7201,11 @@ msgstr "Skeleton2D (Kostra 2D)"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Make Rest Pose (From Bones)"
-msgstr ""
+msgstr "Vytvořit klidovou pózu (z kostí)"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Bones to Rest Pose"
-msgstr ""
+msgstr "Umístit kosti do klidové pózy"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7265,7 +7249,7 @@ msgstr "Změnit osu Z."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Plane Transform."
-msgstr ""
+msgstr "Zobrazit transformaci roviny."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling: "
@@ -7281,7 +7265,7 @@ msgstr "Rotuji %s stupňů."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
-msgstr ""
+msgstr "KlíÄování je deaktivováno (není vložen žádný klíÄ)."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Animation Key Inserted."
@@ -7289,11 +7273,11 @@ msgstr "AnimaÄní klÃ­Ä vložen."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Pitch"
-msgstr ""
+msgstr "Stoupání"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw"
-msgstr ""
+msgstr "Náklon"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Objects Drawn"
@@ -7364,48 +7348,44 @@ msgid "Rear"
msgstr "Zadní"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Align Transform with View"
-msgstr "Zarovnat s výhledem"
+msgstr "Zarovnat se zobrazením"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Align Rotation with View"
-msgstr "Zarovnat výběr s pohledem"
+msgstr "Zarovnat rotaci se zobrazením"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr ""
+msgstr "Neexistuje žádný rodiÄ, u kterého by se vytvoÅ™ila instance potomka."
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
msgstr "Tato operace vyžaduje jeden vybraný uzel."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Auto Orthogonal Enabled"
-msgstr "Ortogonální"
+msgstr "Auto-ortogonalizace zapnutá"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Lock View Rotation"
-msgstr "Zobrazit informace"
+msgstr "Uzamknout rotaci pohledu"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Normal"
-msgstr ""
+msgstr "Normální pohled"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Wireframe"
-msgstr ""
+msgstr "Drátový pohled"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Overdraw"
-msgstr ""
+msgstr "Rentgen pohled"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Display Unshaded"
-msgstr ""
+msgstr "Bezestínový pohled"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Environment"
@@ -7413,7 +7393,7 @@ msgstr "Zobrazit prostředí"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Gizmos"
-msgstr ""
+msgstr "Zobrazit Gizmos"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Information"
@@ -7429,20 +7409,19 @@ msgstr "PoloviÄní rozliÅ¡ení"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Audio Listener"
-msgstr ""
+msgstr "PosluchaÄ zvuku"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Enable Doppler"
-msgstr "Povolit filtrování"
+msgstr "Povolit Doppler"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Cinematic Preview"
-msgstr ""
+msgstr "Filmový náhled"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Not available when using the GLES2 renderer."
-msgstr ""
+msgstr "Není k dispozici při použití vykreslovacího modulu GLES2."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
@@ -7473,20 +7452,20 @@ msgid "Freelook Speed Modifier"
msgstr "Rychlost volného pohledu"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Freelook Slow Modifier"
-msgstr "Rychlost volného pohledu"
+msgstr "Zpomalení volného pohledu"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Rotation Locked"
-msgstr "Zobrazit informace"
+msgstr "Rotace pohledu uzamknuta"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
"Note: The FPS value displayed is the editor's framerate.\n"
"It cannot be used as a reliable indication of in-game performance."
msgstr ""
+"Poznámka: Zobrazená hodnota FPS pochází z editoru.\n"
+"Nelze jej použít jako spolehlivý ukazatel výkonu ve hře."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -7500,15 +7479,19 @@ msgid ""
"Closed eye: Gizmo is hidden.\n"
"Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")."
msgstr ""
+"Kliknutím přepnete mezi stavy viditelnosti.\n"
+"\n"
+"Otevřené oko: Gizmo je viditelný.\n"
+"Zavřené oko: Gizmo je skrytý.\n"
+"Polootevřené oko: Gizmo je viditelné přes neprůhledné (rentgenové) povrchy."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes To Floor"
-msgstr "Přichytit k mřížce"
+msgstr "Přichytit uzly k podlaze"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Couldn't find a solid floor to snap the selection to."
-msgstr ""
+msgstr "Nelze najít pevnou podlahu, na kterou by se přichytil výběr."
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -7522,11 +7505,11 @@ msgstr ""
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Local Space"
-msgstr ""
+msgstr "Použít místní prostor"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr "Použít přichycování"
+msgstr "Použít přichycení"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
@@ -7553,7 +7536,6 @@ msgid "Right View"
msgstr "Pohled zprava"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Switch Perspective/Orthogonal View"
msgstr "Přepnout perspektivní/ortogonální pohled"
@@ -7576,16 +7558,15 @@ msgstr "Přepnout volný pohled"
#: editor/plugins/spatial_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Transform"
-msgstr ""
+msgstr "Transformace"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Object to Floor"
-msgstr "Přichytit k mřížce"
+msgstr "Přichytit objekt k podlaze"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog..."
-msgstr ""
+msgstr "TransformaÄní dialog..."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "1 Viewport"
@@ -7613,7 +7594,7 @@ msgstr "4 výřezy"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Gizmos"
-msgstr ""
+msgstr "Gizmos"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
@@ -7625,9 +7606,8 @@ msgstr "Zobrazit mřížku"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Settings..."
-msgstr "Nastavení"
+msgstr "Nastavení..."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
@@ -7635,18 +7615,17 @@ msgstr "Nastavení přichycení"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Translate Snap:"
-msgstr ""
+msgstr "Přichycení transformace:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Snap (deg.):"
-msgstr "Přichycení rotaze (stupně):"
+msgstr "Přichycení rotace (stupně):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Snap (%):"
-msgstr "Přichycení zvětšení (%):"
+msgstr "Škálovací přichytávání (%):"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Viewport Settings"
msgstr "Nastavení viewportu"
@@ -7656,11 +7635,11 @@ msgstr "Perspektivní FOV (stupně):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
-msgstr ""
+msgstr "Pohled Z-blízko:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
-msgstr ""
+msgstr "Pohled Z-daleko:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
@@ -7692,46 +7671,39 @@ msgstr "Po"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Nameless gizmo"
-msgstr ""
+msgstr "Gizmo beze jména"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create Mesh2D"
-msgstr "Vytvořit 2D mesh"
+msgstr "Vytvořit Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Mesh2D Preview"
-msgstr "Náhled"
+msgstr "Náhled Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create Polygon2D"
msgstr "Vytvořit Polygon3D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Polygon2D Preview"
-msgstr ""
+msgstr "Náhled Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create CollisionPolygon2D"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Vytvořit CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "CollisionPolygon2D Preview"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Náhled CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create LightOccluder2D"
-msgstr "Vytvořit Occluder Polygon"
+msgstr "Vytvořit LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "LightOccluder2D Preview"
-msgstr "Vytvořit Occluder Polygon"
+msgstr "Náhled LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
@@ -7739,59 +7711,55 @@ msgstr "Sprite je prázdný!"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Can't convert a sprite using animation frames to mesh."
-msgstr ""
+msgstr "Nelze pÅ™evést sprite pomocí animaÄních snímků na síť."
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't replace by mesh."
-msgstr ""
+msgstr "Neplatná geometrie, nelze nahradit sítí."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Convert to Mesh2D"
-msgstr "Konvertovat na 2D mesh"
+msgstr "Konvertovat na Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
-msgstr ""
+msgstr "Neplatná geometrie, nelze vytvořit polygon."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Convert to Polygon2D"
-msgstr "Přesunout polygon"
+msgstr "Konvertovat na Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create collision polygon."
-msgstr ""
+msgstr "Neplatná geometrie, nelze vytvořit kolizní polygon."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create CollisionPolygon2D Sibling"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Vytvořit sourozence CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create light occluder."
-msgstr ""
+msgstr "Neplatná geometrie, nelze vytvořit light occluder."
#: editor/plugins/sprite_editor_plugin.cpp
-#, fuzzy
msgid "Create LightOccluder2D Sibling"
-msgstr "Vytvořit Occluder Polygon"
+msgstr "Vytvořit sourozence LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite"
-msgstr ""
+msgstr "Sprite"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Simplification: "
-msgstr ""
+msgstr "Zjednodušení: "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Shrink (Pixels): "
-msgstr ""
+msgstr "Zmenšení (pixely): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Grow (Pixels): "
-msgstr ""
+msgstr "Zvětšení (pixely): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -7802,23 +7770,20 @@ msgid "Settings:"
msgstr "Nastavení:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "No Frames Selected"
-msgstr "Výběr snímku"
+msgstr "Nebyly vybrány žádné snímky"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Add %d Frame(s)"
-msgstr "Přidat snímek"
+msgstr "Přidat %d snímků"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frame"
msgstr "Přidat snímek"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Unable to load images"
-msgstr "Selhalo nahrání zdroje."
+msgstr "Selhalo nahrání obrázků"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "ERROR: Couldn't load frame resource!"
@@ -7826,7 +7791,7 @@ msgstr "CHYBA: Nelze naÄíst zdroj snímku!"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Resource clipboard is empty or not a texture!"
-msgstr ""
+msgstr "Schránka zdrojů je prázdná nebo to není textura!"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Paste Frame"
@@ -7857,9 +7822,8 @@ msgid "New Animation"
msgstr "Nová animace"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Speed:"
-msgstr "Rychlost (FPS):"
+msgstr "Rychlost:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Loop"
@@ -7870,13 +7834,12 @@ msgid "Animation Frames:"
msgstr "Snímky animace:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Add a Texture from File"
-msgstr "Přidat uzel(y) ze stromu"
+msgstr "Přidat texturu ze souboru"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frames from a Sprite Sheet"
-msgstr ""
+msgstr "PÅ™idat rámeÄky ze Sprite Sheet"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
@@ -7899,40 +7862,36 @@ msgid "Select Frames"
msgstr "Vybrat snímky"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Horizontal:"
-msgstr "Převrátit horizontálně"
+msgstr "Horizonálně:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Vertical:"
-msgstr "Vrcholy"
+msgstr "Vertikálně:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Select/Clear All Frames"
-msgstr "Vybrat vše"
+msgstr "Vybrat vÅ¡echny/žádné rámeÄky"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Create Frames from Sprite Sheet"
-msgstr "Vytvořit ze scény"
+msgstr "VytvoÅ™it rámeÄky ze Sprite Sheet"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "SpriteFrames"
-msgstr ""
+msgstr "SpriteFrames"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Set Region Rect"
-msgstr ""
+msgstr "Nastavit oblast textury"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Set Margin"
-msgstr ""
+msgstr "Nastavit okraj"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
-msgstr ""
+msgstr "Režim přichycení:"
#: editor/plugins/texture_region_editor_plugin.cpp
#: scene/resources/visual_shader.cpp
@@ -7941,15 +7900,15 @@ msgstr "Žádné"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Pixel Snap"
-msgstr ""
+msgstr "Přichycení na pixely"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Grid Snap"
-msgstr ""
+msgstr "Přichycení na mřížku"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Auto Slice"
-msgstr ""
+msgstr "Automatický řez"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Offset:"
@@ -7961,10 +7920,9 @@ msgstr "Krok:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Sep.:"
-msgstr ""
+msgstr "OddÄ›lovaÄ:"
#: editor/plugins/texture_region_editor_plugin.cpp
-#, fuzzy
msgid "TextureRegion"
msgstr "Oblast textury"
@@ -8013,71 +7971,64 @@ msgid "Create From Current Editor Theme"
msgstr "VytvoÅ™it ze souÄasného motivu editoru"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Button"
-msgstr "TlaÄítko myÅ¡i"
+msgstr "PÅ™epínatelné tlaÄítko"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Disabled Button"
-msgstr "ProstÅ™ední tlaÄítko"
+msgstr "Deaktivované tlaÄítko"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Item"
msgstr "Položka"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Disabled Item"
-msgstr "Zakázáno"
+msgstr "Deaktivovaná položka"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Check Item"
-msgstr "Zkontrolovat položku"
+msgstr "Zaškrtávátko"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr ""
+msgstr "Zaškrtávací položka"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Radio Item"
-msgstr ""
+msgstr "Položka volby"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Checked Radio Item"
-msgstr ""
+msgstr "Přepínatelná položka volby"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Named Sep."
-msgstr ""
+msgstr "Nazvaný oddÄ›lovaÄ"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Submenu"
-msgstr ""
+msgstr "Podmenu"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Subitem 1"
-msgstr "Položka"
+msgstr "Podpoložka 1"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Subitem 2"
-msgstr "Položka"
+msgstr "Podpoložka 2"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has"
-msgstr ""
+msgstr "Má"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Many"
-msgstr ""
+msgstr "Mnoho"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Disabled LineEdit"
-msgstr "Zakázáno"
+msgstr "Deaktivovaný LineEdit"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 1"
@@ -8092,13 +8043,12 @@ msgid "Tab 3"
msgstr "Tab 3"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editable Item"
-msgstr "Upravit proměnnou"
+msgstr "Upravitelná položka"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Subtree"
-msgstr ""
+msgstr "Podstrom"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has,Many,Options"
@@ -8139,13 +8089,12 @@ msgstr "Opravit neplatné dlaždice"
#: editor/plugins/tile_map_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Cut Selection"
-msgstr "Vycentrovat výběr"
+msgstr "Výběr řezu"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint TileMap"
-msgstr ""
+msgstr "Nakreslit TileMap"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Line Draw"
@@ -8153,11 +8102,11 @@ msgstr "Nakreslit Äáru"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Rectangle Paint"
-msgstr ""
+msgstr "Nakreslit obdélník"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Bucket Fill"
-msgstr ""
+msgstr "Vyplnit barvou"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase TileMap"
@@ -8173,37 +8122,39 @@ msgstr "Transponovat"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Disable Autotile"
-msgstr ""
+msgstr "Deaktivovat Autotile"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Enable Priority"
-msgstr "Editovat filtry"
+msgstr "Zapnout priority"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Filter tiles"
-msgstr "Filtrovat soubory..."
+msgstr "Filtrovat dlaždice"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Give a TileSet resource to this TileMap to use its tiles."
-msgstr ""
+msgstr "Přidejte TileSet zdroj tomuto TileMap, aby mohl použít jeho dlaždice."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint Tile"
-msgstr ""
+msgstr "Nakreslit dlaždici"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
+"Shift+LTM: Nakreslit Äáru\n"
+"Shift+Příkaz+LMB: Nakreslit obdélník"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Ctrl+LMB: Rectangle Paint"
msgstr ""
+"Shift+LTM: Nakreslit Äáru\n"
+"Shift+Ctrl+LTM: Nakreslit obdélník"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -8226,14 +8177,12 @@ msgid "Flip Vertically"
msgstr "Převrátit vertikálně"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid "Clear Transform"
-msgstr "Animace: změna transformace"
+msgstr "Promazat transformaci"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Add Texture(s) to TileSet."
-msgstr "Přidat uzel(y) ze stromu"
+msgstr "Přidat textury do TileSet."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove selected Texture from TileSet."
@@ -8249,69 +8198,59 @@ msgstr "SlouÄit ze scény"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "New Single Tile"
-msgstr ""
+msgstr "Nová dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Autotile"
-msgstr "Nový textový soubor"
+msgstr "Nové auto-kachliÄky"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "New Atlas"
-msgstr "Nový %s"
+msgstr "Nový Atlas"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Next Coordinate"
-msgstr "Další skript"
+msgstr "Další koordináta"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Select the next shape, subtile, or Tile."
-msgstr ""
+msgstr "Vybrat další tvar, dílÄí dlaždici nebo dlaždici."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Previous Coordinate"
-msgstr "Předchozí skript"
+msgstr "Předchozí koordináta"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Select the previous shape, subtile, or Tile."
-msgstr ""
+msgstr "Vybrat pÅ™edchozí tvar, dílÄí dlaždici nebo dlaždici."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Region"
-msgstr "Režim otáÄení"
+msgstr "Oblast"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Collision"
-msgstr "InterpolaÄní režim"
+msgstr "Kolize"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion"
-msgstr "Editovat polygon"
+msgstr "Okluze"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation"
msgstr "Navigace"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Bitmask"
-msgstr "Režim otáÄení"
+msgstr "Bitmaska"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Priority"
-msgstr "Expertní režim:"
+msgstr "Priority"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Z Index"
-msgstr "Index:"
+msgstr "Z-Index"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Region Mode"
@@ -8322,9 +8261,8 @@ msgid "Collision Mode"
msgstr "Kolizní režim"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion Mode"
-msgstr "Editovat polygon"
+msgstr "Režim okluze"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation Mode"
@@ -8335,9 +8273,8 @@ msgid "Bitmask Mode"
msgstr "Režim bitové masky"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Priority Mode"
-msgstr "Expertní režim:"
+msgstr "Prioritní mód"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Icon Mode"
@@ -8345,7 +8282,7 @@ msgstr "Režim ikony"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Z Index Mode"
-msgstr ""
+msgstr "Režim Z-indexu"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Copy bitmask."
@@ -8360,9 +8297,8 @@ msgid "Erase bitmask."
msgstr "Vymazat bitovou masku."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create a new rectangle."
-msgstr "Vytvořit nové uzly."
+msgstr "Vytvořit nový obdélník."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create a new polygon."
@@ -8370,20 +8306,22 @@ msgstr "Vytvořit nový polygon."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Keep polygon inside region Rect."
-msgstr ""
+msgstr "Udržovat mnohoúhelník uvnitř obdélníku."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Enable snap and show grid (configurable via the Inspector)."
-msgstr ""
+msgstr "Zapnout přichycení a zobrazit mřížku (konfigurovatelnou v inspektoru)."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Display Tile Names (Hold Alt Key)"
-msgstr ""
+msgstr "Zobrazit názvy dlaždic (podržet Alt)"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
"Add or select a texture on the left panel to edit the tiles bound to it."
msgstr ""
+"Přidejte nebo vyberte texturu v levém podokně a upravte k ní připojené "
+"dlaždice."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove selected texture? This will remove all tiles which use it."
@@ -8397,7 +8335,7 @@ msgstr "Nevybrali jste texturu k odstranění."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from scene? This will overwrite all current tiles."
-msgstr ""
+msgstr "Vytvořit ze scény? Aktuální dlaždice budou přepsány."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
@@ -8409,38 +8347,43 @@ msgstr "Odstranit texturu"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "%s file(s) were not added because was already on the list."
-msgstr ""
+msgstr "%s soubory nebyly přidány, protože již byly v seznamu."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
"Drag handles to edit Rect.\n"
"Click on another Tile to edit it."
msgstr ""
+"Přetažením úchytů upravte obdélník.\n"
+"Kliknutím na jinou dlaždici ji upravíte."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Delete selected Rect."
-msgstr "Odstranit vybrané soubory?"
+msgstr "Smazat vybraný obdélník."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"Select current edited sub-tile.\n"
"Click on another Tile to edit it."
-msgstr "Vytvořit složku"
+msgstr ""
+"Vyberte aktuálně upravovanou pod-dlaždici.\n"
+"Kliknutím na jinou dlaždici pro její úpravu."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Delete polygon."
msgstr "Smazat polygon."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"LMB: Set bit on.\n"
"RMB: Set bit off.\n"
"Shift+LMB: Set wildcard bit.\n"
"Click on another Tile to edit it."
-msgstr "Vytvořit složku"
+msgstr ""
+"LTM: Zapnout bit.\n"
+"PTM: Vypnout bit.\n"
+"Shift+LTM: Nastavit wildcard bit.\n"
+"Klikněte na další Dlaždici pro úpravu."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
@@ -8448,24 +8391,29 @@ msgid ""
"bindings.\n"
"Click on another Tile to edit it."
msgstr ""
+"Vyberte dílÄí dlaždici, kterou chcete použít jako ikonu. Bude také použita "
+"pro nesprávně nastavené automatické dlaždice.\n"
+"Kliknutím na jinou dlaždici ji upravíte."
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
"Select sub-tile to change its priority.\n"
"Click on another Tile to edit it."
msgstr ""
+"Vyberte dílÄí dlaždici a změňte její prioritu.\n"
+"Kliknutím na jinou dlaždici ji upravíte."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid ""
"Select sub-tile to change its z index.\n"
"Click on another Tile to edit it."
-msgstr "Vytvořit složku"
+msgstr ""
+"Vybrat pod-dlaždici pro změnu jejího indexu.\n"
+"Klikněte na další dlaždici pro úpravu."
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Set Tile Region"
-msgstr "Oblast textury"
+msgstr "Nastavit oblast textury"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create Tile"
@@ -8473,26 +8421,23 @@ msgstr "Vytvořit dlaždici"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Set Tile Icon"
-msgstr ""
+msgstr "Nastavit ikonu dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Bitmask"
msgstr "Upravit bitovou masku dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Collision Polygon"
-msgstr "Upravit existující polygon:"
+msgstr "Upravit polygon kolize"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Occlusion Polygon"
-msgstr "Editovat polygon"
+msgstr "Editovat okluzní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Navigation Polygon"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Upravit navigaÄní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Paste Tile Bitmask"
@@ -8500,64 +8445,55 @@ msgstr "Vložit bitovou masku dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Clear Tile Bitmask"
-msgstr ""
+msgstr "Odebrat bitovou masku dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Polygon Concave"
-msgstr "Přesunout polygon"
+msgstr "Změnit polygon na konkávní"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Polygon Convex"
-msgstr "Přesunout polygon"
+msgstr "Změnit polygon na konvexní"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Tile"
msgstr "Odstranit dlaždici"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Remove Collision Polygon"
-msgstr "Odstranit polygon a bod"
+msgstr "Odstranit kolizní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Remove Occlusion Polygon"
-msgstr "Vytvořit Occluder Polygon"
+msgstr "Odebrat okluzní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Remove Navigation Polygon"
-msgstr "VytvoÅ™it navigaÄní polygon"
+msgstr "Odstranit navigaÄní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Tile Priority"
-msgstr "Editovat filtry"
+msgstr "Upravit prioritu dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Z Index"
-msgstr ""
+msgstr "Upravit Z Index dlaždice"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Convex"
-msgstr "Přesunout polygon"
+msgstr "Změnit na konvexní"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Make Concave"
-msgstr "Přesunout polygon"
+msgstr "Změnit na konkávní"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create Collision Polygon"
msgstr "Vytvořit kolizní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Occlusion Polygon"
-msgstr "Vytvořit Occluder Polygon"
+msgstr "Vytvořit okluzní polygon"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "This property can't be changed."
@@ -8568,92 +8504,80 @@ msgid "TileSet"
msgstr "TileSet (Sada dlaždic)"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No VCS addons are available."
-msgstr "Jméno rodiÄe uzlu, pokud dostupné"
+msgstr "K dispozici nejsou žádná VCS rozšíření."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
msgstr "Chyba"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "No commit message was provided"
-msgstr "Nebylo poskytnuto žádné jméno"
+msgstr "Nebyla poskytnuta commit message"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No files added to stage"
-msgstr ""
+msgstr "Zádné soubory nebyly přidány k zápisu"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit"
-msgstr "Komunita"
+msgstr "Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "VCS Addon is not initialized"
-msgstr ""
+msgstr "VCS rozšíření nejní inicializováno"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
-msgstr ""
+msgstr "Verzování (VCS)"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Initialize"
-msgstr "Velká písmena"
+msgstr "Inicializovat"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Staging area"
-msgstr ""
+msgstr "K zápsání"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Detect new changes"
-msgstr "Vytvořit nové uzly."
+msgstr "Detekovat nové změny"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Changes"
-msgstr "Změnit"
+msgstr "Změny"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Modified"
-msgstr ""
+msgstr "Úpravy"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Renamed"
-msgstr "Přejmenovat"
+msgstr "Přejmenování"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Deleted"
-msgstr "Odstranit"
+msgstr "Odstraněny"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Typechange"
-msgstr "Změnit"
+msgstr "Změnit typ"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage Selected"
-msgstr "Smazat vybraný"
+msgstr "Připravit vybrané k zapsání"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Stage All"
-msgstr "Uložit vše"
+msgstr "Připravit k zapsání vše"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Add a commit message"
-msgstr ""
+msgstr "Přidat zprávu commitu"
#: editor/plugins/version_control_editor_plugin.cpp
-#, fuzzy
msgid "Commit Changes"
-msgstr "Synchornizace změn skriptu"
+msgstr "Commitnout změny"
#: editor/plugins/version_control_editor_plugin.cpp
#: modules/gdnative/gdnative_library_singleton_editor.cpp
@@ -8662,15 +8586,15 @@ msgstr "Status"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "View file diffs before committing them to the latest version"
-msgstr ""
+msgstr "Podívat se na rozdíly, než se commitnou jako nejnovější verze"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No file diff is active"
-msgstr ""
+msgstr "Žádné aktivní porovnání změn"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Detect changes in file diff"
-msgstr ""
+msgstr "Zjistit změny v souborech"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
@@ -8694,79 +8618,67 @@ msgstr "Boolean"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Sampler"
-msgstr ""
+msgstr "Sampler"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Add input port"
-msgstr "Přidat vstup"
+msgstr "Přidat vstupní port"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add output port"
-msgstr ""
+msgstr "Přidat výstupní port"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change input port type"
-msgstr "Změnit výchozí typ"
+msgstr "Změnit typ vstupního portu"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change output port type"
-msgstr "Změnit výchozí typ"
+msgstr "Změnit typ vystupního portu"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change input port name"
-msgstr "Změnit název vstupu"
+msgstr "Změnit název vstupního portu"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Change output port name"
-msgstr "Změnit název vstupu"
+msgstr "Změnit název výstupního portu"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Remove input port"
-msgstr "Odstranit bod"
+msgstr "Odstranit vstupní port"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Remove output port"
-msgstr "Odstranit bod"
+msgstr "Odstranit výstupní port"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Set expression"
-msgstr "Změnit výraz"
+msgstr "Nastavit výraz"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Resize VisualShader node"
-msgstr "VisualShader"
+msgstr "Škálovat uzel VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
-msgstr ""
+msgstr "Nastavit uniformní jméno"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Input Default Port"
-msgstr ""
+msgstr "Nastavit výchozí vstupní port"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Add Node to Visual Shader"
-msgstr "VisualShader"
+msgstr "Přidat uzel do VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
msgstr "Uzel přesunut"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Duplicate Nodes"
-msgstr "Duplikovat uzel/uzly"
+msgstr "Duplikovat uzly"
#: editor/plugins/visual_shader_editor_plugin.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -8774,18 +8686,16 @@ msgid "Paste Nodes"
msgstr "Vložit uzly"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Delete Nodes"
-msgstr "Smazat uzel"
+msgstr "Smazat uzly"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Input Type Changed"
-msgstr ""
+msgstr "Typ vstupu Visual Shader změněn"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Změna transformace"
+msgstr "Název UniformRef byl změněn"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -8800,198 +8710,191 @@ msgid "Light"
msgstr "Světlo"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Show resulted shader code."
-msgstr "Vytvořit uzel"
+msgstr "Zobrazit výsledný kód shaderu."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Create Shader Node"
-msgstr "Vytvořit uzel"
+msgstr "Vytvořit shader uzel"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Color function."
-msgstr "Přejít na funkci"
+msgstr "Funkce obarvení."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Color operator."
-msgstr ""
+msgstr "Operátor barvy."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Grayscale function."
-msgstr "Vytvořit funkci"
+msgstr "Funkce stupnÄ› Å¡edi."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Converts HSV vector to RGB equivalent."
-msgstr ""
+msgstr "Převede vektor HSV na ekvivalentní RGB."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Converts RGB vector to HSV equivalent."
-msgstr ""
+msgstr "Převede vektor RGB na ekvivalentní HSV."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Sepia function."
-msgstr "Přejmenovat funkci"
+msgstr "Funkce sépie."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Burn operator."
-msgstr ""
+msgstr "Operátor vypálení."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Darken operator."
-msgstr ""
+msgstr "Operátor ztmavení."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Difference operator."
-msgstr "Pouze rozdíly"
+msgstr "Operátor rozdílu."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Dodge operator."
-msgstr ""
+msgstr "Operátor uhnutí."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "HardLight operator."
-msgstr "Změnit skalární operátor"
+msgstr "Operátor tvrdého světla."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Lighten operator."
-msgstr ""
+msgstr "Operátor zesvětlení."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Overlay operator."
-msgstr ""
+msgstr "Operátor překrytí."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Screen operator."
-msgstr ""
+msgstr "Operátor screen."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "SoftLight operator."
-msgstr ""
+msgstr "Operátor měkkého světla."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Color constant."
-msgstr "Konstantní"
+msgstr "Konstantní barva."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Color uniform."
-msgstr "Animace: změna transformace"
+msgstr "Uniformní barva."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Returns the boolean result of the %s comparison between two parameters."
-msgstr "Vrátí inverzní odmocninu z parametru."
+msgstr "Vrátí booleovský výsledek %s porovnání mezi dvěma parametry."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Equal (==)"
-msgstr ""
+msgstr "Rovnost (==)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than (>)"
-msgstr ""
+msgstr "Větší než (>)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than or Equal (>=)"
-msgstr ""
+msgstr "Větší nebo rovno (>=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns an associated vector if the provided scalars are equal, greater or "
"less."
msgstr ""
+"Vrátí přidružený vektor, pokud jsou dané skaláry stejné, větší nebo menší."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns the boolean result of the comparison between INF and a scalar "
"parameter."
-msgstr ""
+msgstr "Vrátí booleovský výsledek srovnání mezi INF a skalárním parametrem."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns the boolean result of the comparison between NaN and a scalar "
"parameter."
-msgstr ""
+msgstr "Vrátí booleovský výsledek srovnání mezi NaN a skalárním parametrem."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than (<)"
-msgstr ""
+msgstr "Menší než (<)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than or Equal (<=)"
-msgstr ""
+msgstr "Menší nebo rovno (<=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Not Equal (!=)"
-msgstr ""
+msgstr "Není rovno (!=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns an associated vector if the provided boolean value is true or false."
msgstr ""
+"Vrátí přidružený vektor, pokud je daná logická hodnota true nebo false."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns an associated scalar if the provided boolean value is true or false."
msgstr ""
+"Vrátí přidružený skalár, pokud je daná logická hodnota true nebo false."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Returns the boolean result of the comparison between two parameters."
-msgstr "Vrátí tangens parametru."
+msgstr "Vrátí booleovský výsledek porovnání mezi dvěma parametry."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns the boolean result of the comparison between INF (or NaN) and a "
"scalar parameter."
msgstr ""
+"Vrátí booleovský výsledek srovnání mezi INF (nebo NaN) a skalárním "
+"parametrem."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Boolean constant."
-msgstr ""
+msgstr "Booleovská konstanta."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Boolean uniform."
-msgstr ""
+msgstr "Bool uniform."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for all shader modes."
-msgstr ""
+msgstr "Zadejte parametr \"%s\" pro všechny režimy shaderu."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Input parameter."
-msgstr "PÅ™ichytit k rodiÄovi"
+msgstr "Vstupní parametr."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex and fragment shader modes."
-msgstr ""
+msgstr "Vstupní parametr \"%s\" pro režimy shaderu vrcholů a fragmentů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for fragment and light shader modes."
-msgstr ""
+msgstr "Zadejte parametr \"%s\" pro fragmentový a světelný shader."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for fragment shader mode."
-msgstr ""
+msgstr "Vstupní parametr \"%s\" pro režim shaderu fragmentu."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for light shader mode."
-msgstr "'%s' vstupní parametr pro mód světelného shaderu."
+msgstr "\"%s\" vstupní parametr pro mód světelného shaderu."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex shader mode."
-msgstr "'%s' vstupní parametr pro mód vertexového shaderu."
+msgstr "\"%s\" vstupní parametr pro mód vertexového shaderu."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex and fragment shader mode."
-msgstr "'%s' vstupní parametr pro mód vertexového a fragmentového shaderu."
+msgstr "\"%s\" vstupní parametr pro mód vertexového a fragmentového shaderu."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Scalar function."
@@ -9184,6 +9087,11 @@ msgid ""
"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
"using Hermite polynomials."
msgstr ""
+"Funkce plynulého přechodu( skalár(edge0), skalár(edge1), skalár(x) ).\n"
+"\n"
+"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud \"x\" je větší "
+"než \"edge1\". V opaÄném případÄ› vrátí interpolovanou hodnotu mezi 0.0 a 1.0 "
+"vypoÄtenou pomocí Hermitových polynomů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9191,6 +9099,9 @@ msgid ""
"\n"
"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
msgstr ""
+"Skoková funkce( skalár(hrana), skalár(x) ).\n"
+"\n"
+"Vrátí 0.0, pokud je \"x\" menší než hrana, jinak vrátí 1.0."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the tangent of the parameter."
@@ -9201,9 +9112,8 @@ msgid "Returns the hyperbolic tangent of the parameter."
msgstr "Vrátí hyperbolický tangens parametru."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Finds the truncated value of the parameter."
-msgstr "Vrátí absolutní hodnotu parametru."
+msgstr "Vrátí zkrácenou hodnotu parametru."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Adds scalar to scalar."
@@ -9219,46 +9129,43 @@ msgstr "Vynásobí skalár skalárem."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the remainder of the two scalars."
-msgstr ""
+msgstr "Vrátí zbytek dvou skalárů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Subtracts scalar from scalar."
-msgstr ""
+msgstr "OdeÄte skalár od skaláru."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Scalar constant."
-msgstr "Změnit skalární konstantu"
+msgstr "Konstantní skalár."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Scalar uniform."
-msgstr "Animace: změna transformace"
+msgstr "Uniformní skalár."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Perform the cubic texture lookup."
-msgstr ""
+msgstr "Provést vyhledání kubické textury."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Perform the texture lookup."
-msgstr ""
+msgstr "Provést vyhledávání textury."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Cubic texture uniform lookup."
-msgstr ""
+msgstr "Uniformní vyhledání kubické textury."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "2D texture uniform lookup."
-msgstr ""
+msgstr "Uniformní vyhledání 2D textury."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "2D texture uniform lookup with triplanar."
-msgstr ""
+msgstr "Uniformní vyhledání 2D textury s triplanar mapováním."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Transform function."
-msgstr "Transformovat polygon"
+msgstr "Funkce transformace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9270,73 +9177,76 @@ msgid ""
"whose number of rows is the number of components in 'c' and whose number of "
"columns is the number of components in 'r'."
msgstr ""
+"VypoÄte dyadický souÄin dvojice vektorů.\n"
+"\n"
+"OuterProduct vezme první parametr \"c\" jako vektor sloupce (matice s jedním "
+"sloupcem) a druhý parametr \"r\" jako vektor řádku (matice s jedním řádkem) "
+"a provede násobení matice \"c * r\", což má za výsledek matici s poÄtem "
+"řádků stejný jako v \"c\" a poÄet sloupců stejný jako v \"r\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Composes transform from four vectors."
-msgstr ""
+msgstr "Složí transformaci ze ÄtyÅ™ vektorů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Decomposes transform to four vectors."
-msgstr ""
+msgstr "Rozloží transformaci na ÄtyÅ™i vektory."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the determinant of a transform."
-msgstr ""
+msgstr "VypoÄítá determinant transformace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the inverse of a transform."
-msgstr ""
+msgstr "PoÄítá inverzní transformaci."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the transpose of a transform."
-msgstr ""
+msgstr "VypoÄítá transpozici tranformace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Multiplies transform by transform."
-msgstr ""
+msgstr "Pronásobí transformaci transformací."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Multiplies vector by transform."
-msgstr ""
+msgstr "Pronásobí vektor transformací."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Transform constant."
-msgstr "Transformace zrušena."
+msgstr "TransformaÄní konstanta."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Transform uniform."
-msgstr "Transformace zrušena."
+msgstr "Uniformní transformace."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Vector function."
-msgstr "Přejít na funkci..."
+msgstr "Vektorová funkce."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector operator."
-msgstr ""
+msgstr "Vektorový operátor."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Composes vector from three scalars."
-msgstr ""
+msgstr "Skládá vektor ze tří skalárů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Decomposes vector to three scalars."
-msgstr ""
+msgstr "Rozloží vektor na tři skaláry."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the cross product of two vectors."
-msgstr ""
+msgstr "SpoÄítá vektorový produkt dvou vektorů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the distance between two points."
-msgstr ""
+msgstr "Vrátí vzdálenost mezi dvěma body."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the dot product of two vectors."
-msgstr ""
+msgstr "VypoÄítá skalární souÄin dvou vektorů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9345,41 +9255,46 @@ msgid ""
"incident vector, and Nref, the reference vector. If the dot product of I and "
"Nref is smaller than zero the return value is N. Otherwise -N is returned."
msgstr ""
+"Vrátí vektor, který ukazuje ve stejném smÄ›ru referenÄní vektor. Funkce má "
+"tři vektorové parametry: orientovaný vektor N, sousední vektor I a "
+"referenÄní vektor Nref. Pokud je skalární souÄin I a Nref menší než nula, "
+"vrátí se N. Jinak se vrátí -N."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the length of a vector."
-msgstr ""
+msgstr "SpoÄítá délku vektoru."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Linear interpolation between two vectors."
-msgstr ""
+msgstr "Lineární interpolace mezi dvěma vektory."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Linear interpolation between two vectors using scalar."
-msgstr "Lineární interpolace mezi dvěma skaláry."
+msgstr "Lineární interpolace mezi dvěma vektory pomocí skaláru."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the normalize product of vector."
-msgstr ""
+msgstr "SpoÄítá normalizovaný vektor."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "1.0 - vector"
-msgstr ""
+msgstr "1.0 - vektor"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "1.0 / vector"
-msgstr ""
+msgstr "1.0 / vektor"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns the vector that points in the direction of reflection ( a : incident "
"vector, b : normal vector )."
msgstr ""
+"Vrátí vektor směřující ve směru odrazu ( a : vektor dopadu, b : normálový "
+"vektor )."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the vector that points in the direction of refraction."
-msgstr ""
+msgstr "Vrátí vektor ve směru lomu světla."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9389,6 +9304,11 @@ msgid ""
"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
"using Hermite polynomials."
msgstr ""
+"Funkce plynulého přechodu ( vektor(edge0), vektor(edge1), vektor(x) ).\n"
+"\n"
+"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud x je větší než "
+"\"edge1\". V opaÄném případÄ› vrátí interpolovanou hodnotu mezi 0.0 a 1.0 "
+"vypoÄtenou pomocí Hermitových polynomů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9398,6 +9318,11 @@ msgid ""
"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
"using Hermite polynomials."
msgstr ""
+"Funkce plynulého přechodu( skalár(edge0), skalár(edge1), vektor(x) ).\n"
+"\n"
+"Vrátí 0.0, pokud \"x\" je menší než \"edge0\" a 1.0, pokud \"x\" je větší "
+"než \"edge1\". V opaÄném případÄ› vrátí interpolovanou hodnotu mezi 0.0 a 1.0 "
+"vypoÄtenou pomocí Hermitových polynomů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9405,6 +9330,9 @@ msgid ""
"\n"
"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
msgstr ""
+"Skoková funkce( vektor(hrana), vektor(x) ).\n"
+"\n"
+"Vrátí 0.0, pokud je \"x\" menší než \"hrana\", jinak vrátí 1.0."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9412,34 +9340,37 @@ msgid ""
"\n"
"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
msgstr ""
+"Skoková funkce( skalár(hrana), vektor(x) ).\n"
+"\n"
+"Vrátí 0.0, pokud je \"x\" menší než \"hrana\", jinak vrátí 1.0."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Adds vector to vector."
-msgstr ""
+msgstr "PÅ™iÄte vektor k vektoru."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Divides vector by vector."
-msgstr ""
+msgstr "Vydělí vektor vektorem."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Multiplies vector by vector."
-msgstr ""
+msgstr "Pronásobí vektor vektorem."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the remainder of the two vectors."
-msgstr ""
+msgstr "Vrátí zbytek po dělení dvou vektorů."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Subtracts vector from vector."
-msgstr ""
+msgstr "OdeÄte vektor od vektoru."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector constant."
-msgstr ""
+msgstr "Konstantní vektor."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector uniform."
-msgstr ""
+msgstr "Uniformní vektor."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9447,12 +9378,17 @@ msgid ""
"output ports. This is a direct injection of code into the vertex/fragment/"
"light function, do not use it to write the function declarations inside."
msgstr ""
+"Vlastní výraz v jazyce shaderu Godot s vlastním poÄtem vstupních a "
+"výstupních portů. Toto je přímé vkládání kódu do funkcí vrcholů/fragmentů/"
+"osvětlení, nepoužívat k deklaraci funkcí."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns falloff based on the dot product of surface normal and view "
"direction of camera (pass associated inputs to it)."
msgstr ""
+"Vrátí sklon na základÄ› skalárního souÄinu normály povrchu a smÄ›ru pohledu "
+"kamery (zde zadejte vstup)."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9461,68 +9397,82 @@ msgid ""
"it later in the Expressions. You can also declare varyings, uniforms and "
"constants."
msgstr ""
+"Vlastní výraz v jazyce shaderu Godot, který bude umístěn nad výsledek "
+"shaderu. Uvnitř můžete vytvořit různé definice funkcí a později je volat "
+"pomocí Expressions. Můžete také deklarovat proměnné, \"uniforms\" a "
+"konstanty."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "Reference na existující uniform."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
-msgstr ""
+msgstr "(Pouze pro režim Fragment/Light) Skalární derivace funkce."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Vector derivative function."
-msgstr ""
+msgstr "(Pouze pro režim Fragment/Light) Vektorová derivace funkce."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
"differencing."
msgstr ""
+"(Pouze pro režim Fragment/Light) (Vektor) Derivace podle \"x\" pomocí místní "
+"variace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local "
"differencing."
msgstr ""
+"(Pouze pro režim Fragment/Light) (Skalární) Derivace podle \"x\" pomocí "
+"místní variace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
"differencing."
msgstr ""
+"(Pouze pro režim Fragment/Light) (Vektor) Derivace podle \"y\" pomocí místní "
+"variace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local "
"differencing."
msgstr ""
+"(Pouze pro režim Fragment/Light) (Skalár) Derivace podle \"y\" pomocí místní "
+"variace."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
+"(Pouze pro režim Fragment/Light) (Vektor) SouÄet absolutní derivace podle \"x"
+"\" a \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
+"(Pouze pro režim Fragment/Light) (Skalár) SouÄet absolutní derivace podle \"x"
+"\" a \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
msgstr "VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property"
-msgstr "Editovat filtry"
+msgstr "Upravit vizuální vlastnost"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Visual Shader Mode Changed"
-msgstr "Změny shaderu"
+msgstr "Změnit režim vizuálního shaderu"
#: editor/project_export.cpp
msgid "Runnable"
@@ -9537,6 +9487,8 @@ 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 ""
@@ -9544,6 +9496,9 @@ msgid ""
"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 "Release"
@@ -9554,13 +9509,12 @@ msgid "Exporting All"
msgstr "Exportování všeho"
#: editor/project_export.cpp
-#, fuzzy
msgid "The given export path doesn't exist:"
-msgstr "Cesta neexistuje."
+msgstr "Zadaná cesta pro export neexistuje:"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing/corrupted:"
-msgstr "Exportní šablony pro tuto platformu chybí nebo jsou poškozené:"
+msgstr "Šablony exportu pro tuto platformu chybí nebo jsou poškozené:"
#: editor/project_export.cpp
msgid "Presets"
@@ -9575,6 +9529,8 @@ msgid ""
"If checked, the preset will be available for use in one-click deploy.\n"
"Only one preset per platform may be marked as runnable."
msgstr ""
+"Když je zaškrtlé, tak bude profil k dispozici pro rychlé nasazení.\n"
+"Pouze jeden profil na platformÄ› může být oznaÄen jako spuÅ¡tÄ›ný."
#: editor/project_export.cpp
msgid "Export Path"
@@ -9609,12 +9565,16 @@ msgid ""
"Filters to export non-resource files/folders\n"
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
+"Filtry pro export souborů/složek, které nejsou zdroji\n"
+"(oddÄ›lené Äárkou, napÅ™. *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid ""
"Filters to exclude files/folders from project\n"
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
+"Filtry pro vynechání souborů/složek z projektu\n"
+"(oddÄ›lené Äárkou, napÅ™. *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid "Features"
@@ -9678,49 +9638,45 @@ msgstr "Soubor ZIP"
#: editor/project_export.cpp
msgid "Godot Game Pack"
-msgstr ""
+msgstr "Hrací balíÄek Godot"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
-msgstr "Exportní šablony pro tuto platformu chybí:"
+msgstr "Šablony exportu pro tuto platformu chybí:"
#: editor/project_export.cpp
msgid "Manage Export Templates"
-msgstr "Spravovat exportní šablony"
+msgstr "Spravovat Å¡ablony exportu"
#: editor/project_export.cpp
msgid "Export With Debug"
-msgstr ""
+msgstr "Exportovat s laděním"
#: editor/project_manager.cpp
-#, fuzzy
msgid "The path specified doesn't exist."
-msgstr "Cesta neexistuje."
+msgstr "Zadaná cesta neexistuje."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Error opening package file (it's not in ZIP format)."
-msgstr "NepodaÅ™ilo se otevřít balíÄek, není ve formátu ZIP."
+msgstr "Chyba pÅ™i otevírání balíÄku (není ve formátu ZIP)."
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
-msgstr "Neplatný projektový '.zip' soubor; neobsahuje soubor 'project.godot'."
+msgstr ""
+"Neplatný soubor projektu \".zip\"; neobsahuje soubor \"project.godot\"."
#: editor/project_manager.cpp
msgid "Please choose an empty folder."
msgstr "Zvolte prosím prázdnou složku."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Please choose a \"project.godot\" or \".zip\" file."
-msgstr "Zvolte prosím soubor 'project.godot' nebo '.zip'."
+msgstr "Vyberte prosím soubor \"project.godot\" nebo \".zip\"."
#: editor/project_manager.cpp
-#, fuzzy
msgid "This directory already contains a Godot project."
-msgstr "Složka již obsahuje projekt Godotu."
+msgstr "Složka již obsahuje Godot projekt."
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -9929,18 +9885,20 @@ msgid ""
"Can't run project: Assets need to be imported.\n"
"Please edit the project to trigger the initial import."
msgstr ""
+"Nelze spustit projekt: Musí být importovány zdroje.\n"
+"Otevřete projekt, aby se spustilo prvotní importování."
#: editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run %d projects at once?"
-msgstr "Jste si jisti, že chcete spustit více než jeden projekt?"
+msgstr "Jste si jisti, že chcete spustit %d projektů najednou?"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Remove %d projects from the list?\n"
"The project folders' contents won't be modified."
-msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotÄen)"
+msgstr ""
+"Odebrat %d projekty ze seznamu?\n"
+"Obsah složek projektů zůstane nedotÄen."
#: editor/project_manager.cpp
msgid ""
@@ -9951,23 +9909,28 @@ msgstr ""
"Obsah složky zůstane nedotÄen."
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"Remove all missing projects from the list?\n"
"The project folders' contents won't be modified."
-msgstr "Odstranit projekt ze seznamu? (Obsah složky zůstane nedotÄen)"
+msgstr ""
+"Odstranit všechny chybějící projekty ze seznamu?\n"
+"Obsah složek projektů zůstane nedotÄen."
#: editor/project_manager.cpp
msgid ""
"Language changed.\n"
"The interface will update after restarting the editor or project manager."
msgstr ""
+"Jazyk byl změněn.\n"
+"Rozhraní se aktualizuje po restartování editoru nebo projektového manažera."
#: editor/project_manager.cpp
msgid ""
"Are you sure to scan %s folders for existing Godot projects?\n"
"This could take a while."
msgstr ""
+"Opravdu hledat projekty Godot ve složce %s?\n"
+"Může to chvíli trvat."
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
#: editor/project_manager.cpp
@@ -9980,7 +9943,7 @@ msgstr "Projekty"
#: editor/project_manager.cpp
msgid "Last Modified"
-msgstr ""
+msgstr "Datum modifikace"
#: editor/project_manager.cpp
msgid "Scan"
@@ -10024,6 +9987,10 @@ msgid ""
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
+"Vyhledávací lišta filtruje projekty podle názvu a poslední komponenty "
+"cesty.\n"
+"Chcete-li filtrovat podle názvu a celé cesty, musí dotaz obsahovat alespoň "
+"jeden znak \"/\"."
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -10055,16 +10022,15 @@ msgstr "Akce s názvem \"%s\" již existuje."
#: editor/project_settings_editor.cpp
msgid "Rename Input Action Event"
-msgstr ""
+msgstr "Přejmenovat událost vstupní akce"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Change Action deadzone"
-msgstr "Změnit hodnotu slovníku"
+msgstr "Změnit mrtvou zónu akce"
#: editor/project_settings_editor.cpp
msgid "Add Input Action Event"
-msgstr ""
+msgstr "Přidat událost vstupní akce"
#: editor/project_settings_editor.cpp
msgid "All Devices"
@@ -10103,28 +10069,24 @@ msgid "Wheel Down Button"
msgstr "KoleÄko dolů"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Wheel Left Button"
-msgstr "KoleÄko nahoru"
+msgstr "Levé tlaÄítko koleÄka"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Wheel Right Button"
-msgstr "Pravé tlaÄítko"
+msgstr "Pravé tlaÄítko koleÄka"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "X Button 1"
-msgstr "TlaÄítko Ä. 6"
+msgstr "TlaÄítko X 1"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "X Button 2"
-msgstr "TlaÄítko Ä. 6"
+msgstr "TlaÄítko X 2"
#: editor/project_settings_editor.cpp
msgid "Joypad Axis Index:"
-msgstr ""
+msgstr "Index osy Joypadu:"
#: editor/project_settings_editor.cpp
msgid "Axis"
@@ -10132,16 +10094,15 @@ msgstr "Osa"
#: editor/project_settings_editor.cpp
msgid "Joypad Button Index:"
-msgstr ""
+msgstr "Index tlaÄítka joysticku:"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Erase Input Action"
-msgstr "Změnit měřítko výběru"
+msgstr "Vymazat vstupní akce"
#: editor/project_settings_editor.cpp
msgid "Erase Input Action Event"
-msgstr ""
+msgstr "Vymazat událost vstupní akce"
#: editor/project_settings_editor.cpp
msgid "Add Event"
@@ -10149,7 +10110,7 @@ msgstr "Přidat akci"
#: editor/project_settings_editor.cpp
msgid "Button"
-msgstr "Button"
+msgstr "TlaÄítko"
#: editor/project_settings_editor.cpp
msgid "Left Button."
@@ -10177,7 +10138,7 @@ msgstr "Přidat globální vlastnost"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr ""
+msgstr "Nejprve vyberte nastavení ze seznamu!"
#: editor/project_settings_editor.cpp
msgid "No property '%s' exists."
@@ -10185,7 +10146,7 @@ msgstr "Vlastnost '%s' neexistuje."
#: editor/project_settings_editor.cpp
msgid "Setting '%s' is internal, and it can't be deleted."
-msgstr ""
+msgstr "Nastavení \"%s\" je integrované a nemůže být smazáno."
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -10201,7 +10162,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
-msgstr ""
+msgstr "Přidat vstupní akci"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -10212,13 +10173,12 @@ msgid "Settings saved OK."
msgstr "Nastavení úspěšně uloženo."
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Moved Input Action Event"
-msgstr "Změnit měřítko výběru"
+msgstr "Přesunutá událost vstupní akce"
#: editor/project_settings_editor.cpp
msgid "Override for Feature"
-msgstr ""
+msgstr "Přepsání vlastnosti"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
@@ -10230,32 +10190,31 @@ msgstr "Odstranit překlad"
#: editor/project_settings_editor.cpp
msgid "Add Remapped Path"
-msgstr ""
+msgstr "Přidat přemapovanou cestu"
#: editor/project_settings_editor.cpp
msgid "Resource Remap Add Remap"
-msgstr ""
+msgstr "Přidat přemapování zdroje"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
-msgstr ""
+msgstr "Změnit jazyk přemapování zdrojů"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
-msgstr ""
+msgstr "Odebrat přemapování zdroje"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap Option"
-msgstr ""
+msgstr "Odebrat možnost přemapování zdroje"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Changed Locale Filter"
-msgstr "Změnit typ hodnot pole"
+msgstr "Upravený filtr lokalizace"
#: editor/project_settings_editor.cpp
msgid "Changed Locale Filter Mode"
-msgstr ""
+msgstr "Změněn režim filtru pro nastavení jazyka"
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
@@ -10267,15 +10226,15 @@ msgstr "Všeobecné"
#: editor/project_settings_editor.cpp
msgid "Override For..."
-msgstr ""
+msgstr "PÅ™epsání Äeho..."
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "The editor must be restarted for changes to take effect."
-msgstr ""
+msgstr "Pro projevení změn, je nutné restartovat editor."
#: editor/project_settings_editor.cpp
msgid "Input Map"
-msgstr ""
+msgstr "Mapování vstupů"
#: editor/project_settings_editor.cpp
msgid "Action:"
@@ -10287,7 +10246,7 @@ msgstr "Akce"
#: editor/project_settings_editor.cpp
msgid "Deadzone"
-msgstr ""
+msgstr "Mrtvá zóna"
#: editor/project_settings_editor.cpp
msgid "Device:"
@@ -10319,25 +10278,23 @@ msgstr "Zdroje:"
#: editor/project_settings_editor.cpp
msgid "Remaps by Locale:"
-msgstr ""
+msgstr "Mapování na základě jazyku:"
#: editor/project_settings_editor.cpp
msgid "Locale"
-msgstr ""
+msgstr "Jazyky"
#: editor/project_settings_editor.cpp
msgid "Locales Filter"
-msgstr ""
+msgstr "Filtr jazyků"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show All Locales"
-msgstr "Zobrazit kosti"
+msgstr "Zobrazit všechny jazyky"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Show Selected Locales Only"
-msgstr "Pouze výběr"
+msgstr "Zobrazit pouze vybrané jazyky"
#: editor/project_settings_editor.cpp
msgid "Filter mode:"
@@ -10345,11 +10302,11 @@ msgstr "Režim filtru:"
#: editor/project_settings_editor.cpp
msgid "Locales:"
-msgstr ""
+msgstr "Jazyky:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
-msgstr ""
+msgstr "Autoload"
#: editor/project_settings_editor.cpp
msgid "Plugins"
@@ -10365,11 +10322,11 @@ msgstr "Nula"
#: editor/property_editor.cpp
msgid "Easing In-Out"
-msgstr ""
+msgstr "Hladký vstup-výstup"
#: editor/property_editor.cpp
msgid "Easing Out-In"
-msgstr ""
+msgstr "Hladký výstup-vstup"
#: editor/property_editor.cpp
msgid "File..."
@@ -10389,7 +10346,7 @@ msgstr "Vybrat uzel"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr ""
+msgstr "Chyba pÅ™i naÄítání souboru: Žádný zdroj!"
#: editor/property_editor.cpp
msgid "Pick a Node"
@@ -10397,7 +10354,7 @@ msgstr "Vybrat uzel"
#: editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr ""
+msgstr "Bit %d, hodnota %d."
#: editor/property_selector.cpp
msgid "Select Property"
@@ -10416,33 +10373,28 @@ msgid "Batch Rename"
msgstr "Dávkové přejmenování"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Replace:"
-msgstr "Nahradit: "
+msgstr "Nahradit:"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Prefix:"
-msgstr "Prefix"
+msgstr "Prefix:"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Suffix:"
-msgstr "Sufix"
+msgstr "Sufix:"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Use Regular Expressions"
-msgstr "Regulární výrazy"
+msgstr "Použít regulární výrazy"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Advanced Options"
msgstr "PokroÄilé možnosti"
#: editor/rename_dialog.cpp
msgid "Substitute"
-msgstr ""
+msgstr "Nahradit"
#: editor/rename_dialog.cpp
msgid "Node name"
@@ -10469,14 +10421,16 @@ msgid ""
"Sequential integer counter.\n"
"Compare counter options."
msgstr ""
+"SekvenÄní poÄítadlo celých Äísel.\n"
+"Porovnat možnosti poÄítadla."
#: editor/rename_dialog.cpp
msgid "Per-level Counter"
-msgstr ""
+msgstr "Samostatné poÄítadlo pro každou úroveň"
#: editor/rename_dialog.cpp
msgid "If set, the counter restarts for each group of child nodes."
-msgstr ""
+msgstr "Když je zapnuté, poÄítadlo se resetuje pro každou skupinu potomků."
#: editor/rename_dialog.cpp
msgid "Initial value for the counter"
@@ -10488,7 +10442,7 @@ msgstr "Krok"
#: editor/rename_dialog.cpp
msgid "Amount by which counter is incremented for each node"
-msgstr ""
+msgstr "Hodnota, o kterou se poÄítadlo zvýší za každý uzel"
#: editor/rename_dialog.cpp
msgid "Padding"
@@ -10504,23 +10458,23 @@ msgstr ""
#: editor/rename_dialog.cpp
msgid "Post-Process"
-msgstr ""
+msgstr "Následné zpracování"
#: editor/rename_dialog.cpp
msgid "Keep"
-msgstr ""
+msgstr "Zachovat"
#: editor/rename_dialog.cpp
msgid "PascalCase to snake_case"
-msgstr "PascalCase na snake_case"
+msgstr "CamelCase na snake_case"
#: editor/rename_dialog.cpp
msgid "snake_case to PascalCase"
-msgstr "snake_case na PascalCase"
+msgstr "snake_case na CamelCase"
#: editor/rename_dialog.cpp
msgid "Case"
-msgstr ""
+msgstr "Notace"
#: editor/rename_dialog.cpp
msgid "To Lowercase"
@@ -10535,9 +10489,8 @@ msgid "Reset"
msgstr "Resetovat"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Regular Expression Error:"
-msgstr "Chyba regulárního výrazu"
+msgstr "Chyba regulárního výrazu:"
#: editor/rename_dialog.cpp
msgid "At character %s"
@@ -10545,23 +10498,23 @@ msgstr "Na znaku %s"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent Node"
-msgstr ""
+msgstr "ZmÄ›nit rodiÄe uzlu"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr ""
+msgstr "ZmÄ›nit rodiÄe lokace (Vybrat nového rodiÄe):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
-msgstr ""
+msgstr "Zachovat globální transformaci"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent"
-msgstr ""
+msgstr "Upravit rodiÄe"
#: editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr ""
+msgstr "Režim spouštění:"
#: editor/run_settings_dialog.cpp
msgid "Current Scene"
@@ -10577,7 +10530,7 @@ msgstr "Argumenty hlavní scény:"
#: editor/run_settings_dialog.cpp
msgid "Scene Run Settings"
-msgstr ""
+msgstr "Nastavení spuštění scény"
#: editor/scene_tree_dock.cpp
msgid "No parent to instance the scenes at."
@@ -10592,19 +10545,19 @@ msgid ""
"Cannot instance the scene '%s' because the current scene exists within one "
"of its nodes."
msgstr ""
+"Scénu \"%s\" nelze vytvořit, protože aktuální scéna je jedním z jejích uzlů."
#: editor/scene_tree_dock.cpp
msgid "Instance Scene(s)"
msgstr "Scéna/Scény instance"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Replace with Branch Scene"
-msgstr "Uložit větev jako scénu"
+msgstr "Nahradit větev scénou"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr ""
+msgstr "Přidat instanci scény"
#: editor/scene_tree_dock.cpp
msgid "Detach Script"
@@ -10612,7 +10565,7 @@ msgstr "Odpojit skript"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on the tree root."
-msgstr ""
+msgstr "Tuto operaci nelze provést v kořenovém uzlu stromu."
#: editor/scene_tree_dock.cpp
msgid "Move Node In Parent"
@@ -10629,23 +10582,23 @@ msgstr "Duplikovat uzel/uzly"
#: editor/scene_tree_dock.cpp
msgid "Can't reparent nodes in inherited scenes, order of nodes can't change."
msgstr ""
+"Nadřazené uzly ve zděděné scéně nelze změnit. Pořadí uzlů nelze změnit."
#: editor/scene_tree_dock.cpp
msgid "Node must belong to the edited scene to become root."
-msgstr ""
+msgstr "Uzel musí patřit do editované scény, aby se stal kořenem."
#: editor/scene_tree_dock.cpp
msgid "Instantiated scenes can't become root"
-msgstr ""
+msgstr "Instance scény se nemohou stát kořenem"
#: editor/scene_tree_dock.cpp
msgid "Make node as Root"
msgstr "Nastavit uzel jako zdrojový"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete %d nodes and any children?"
-msgstr "Smazat %d uzlů?"
+msgstr "Smazat %d uzlů a všechny potomky?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
@@ -10653,11 +10606,11 @@ msgstr "Smazat %d uzlů?"
#: editor/scene_tree_dock.cpp
msgid "Delete the root node \"%s\"?"
-msgstr ""
+msgstr "Smazat kořenový uzel \"%s\"?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr ""
+msgstr "Smazat uzel \"%s\" a jeho potomky?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
@@ -10665,11 +10618,11 @@ msgstr "Smazat uzel \"%s\"?"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
-msgstr ""
+msgstr "Toto nelze provést s kořenovým uzlem."
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
-msgstr ""
+msgstr "Tuto operaci nelze provést na instanci scény."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -10680,17 +10633,21 @@ msgid ""
"Disabling \"editable_instance\" will cause all properties of the node to be "
"reverted to their default."
msgstr ""
+"Zakázání \"upravitelné instance“ obnoví výchozí nastavení všech vlastností "
+"uzlu."
#: editor/scene_tree_dock.cpp
msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
+"Povolení možnosti \"NaÄíst jako placeholder\" zakáže možnost \"Upravitelní "
+"potomci\" a způsobí, že všechny vlastnosti uzlu budou vráceny na výchozí "
+"hodnoty."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Make Local"
-msgstr "Místní"
+msgstr "Změnit na lokální"
#: editor/scene_tree_dock.cpp
msgid "New Scene Root"
@@ -10718,11 +10675,11 @@ msgstr "Jiný uzel"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr ""
+msgstr "Nelze manipulovat s uzly z cizí scény!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
-msgstr ""
+msgstr "Nelze pracovat na uzlech, ze kterých dědí aktuální scéna!"
#: editor/scene_tree_dock.cpp
msgid "Attach Script"
@@ -10733,15 +10690,15 @@ msgid "Remove Node(s)"
msgstr "Odstranit uzel/uzly"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Change type of node(s)"
-msgstr "Změnit název vstupu"
+msgstr "Změnit typ uzlů"
#: editor/scene_tree_dock.cpp
msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
+"Scénu se nepodařilo uložit. Některé závislosti pravděpodobně nejsou splněny."
#: editor/scene_tree_dock.cpp
msgid "Error saving scene."
@@ -10749,7 +10706,7 @@ msgstr "Chyba při ukládání scény."
#: editor/scene_tree_dock.cpp
msgid "Error duplicating scene to save it."
-msgstr ""
+msgstr "Chyba ukládání duplikace scény."
#: editor/scene_tree_dock.cpp
msgid "Sub-Resources"
@@ -10757,15 +10714,15 @@ msgstr "DílÄí zdroje"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
-msgstr ""
+msgstr "Vymazat dÄ›diÄnost"
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr ""
+msgstr "Upravitelní potomci"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
-msgstr ""
+msgstr "NaÄíst jako placeholder"
#: editor/scene_tree_dock.cpp
msgid "Open Documentation"
@@ -10777,24 +10734,25 @@ msgid ""
"This is probably because this editor was built with all language modules "
"disabled."
msgstr ""
+"Nelze připojit skript: nejsou zaregistrovány žádné jazyky.\n"
+"Je to pravděpodobně proto, že tento editor byl vytvořen s vypnutými "
+"jazykovými moduly."
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr "Přidat podřízený uzel"
+msgstr "Přidat uzel"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Expand/Collapse All"
-msgstr "Sbalit vše"
+msgstr "Rozbalit/Sbalit vše"
#: editor/scene_tree_dock.cpp
msgid "Change Type"
msgstr "Změnit typ"
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Reparent to New Node"
-msgstr "Přidat/Vytvořit nový uzel"
+msgstr "ZmÄ›nit rodiÄe na nový uzel"
#: editor/scene_tree_dock.cpp
msgid "Make Scene Root"
@@ -10825,16 +10783,16 @@ msgid ""
"Instance a scene file as a Node. Creates an inherited scene if no root node "
"exists."
msgstr ""
+"Přidat instanci scény jako uzel. Pokud neexistuje kořenový uzel, tak vytvoří "
+"zděděnou scénu."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Attach a new or existing script to the selected node."
msgstr "Připojit nový, nebo existující skript k vybranému uzlu."
#: editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Detach the script from the selected node."
-msgstr "Připojit nový, nebo existující skript k vybranému uzlu."
+msgstr "Odpojit skript od vybraného uzlu."
#: editor/scene_tree_dock.cpp
msgid "Remote"
@@ -10846,10 +10804,9 @@ msgstr "Místní"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr ""
+msgstr "Vymazat dÄ›diÄnost? (Nelze vrátit zpÄ›t!)"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Toggle Visible"
msgstr "Přepnout viditelnost"
@@ -10858,14 +10815,12 @@ msgid "Unlock Node"
msgstr "Odemknout uzel"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Button Group"
-msgstr "TlaÄítko Ä. 7"
+msgstr "Skupina tlaÄítek"
#: editor/scene_tree_editor.cpp
-#, fuzzy
msgid "(Connecting From)"
-msgstr "Chyba připojení"
+msgstr "(Připojování z)"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
@@ -10876,18 +10831,24 @@ msgid ""
"Node has %s connection(s) and %s group(s).\n"
"Click to show signals dock."
msgstr ""
+"Uzel má %s připojení a %s skupin.\n"
+"Kliknutím zobrazíte panel signálů."
#: editor/scene_tree_editor.cpp
msgid ""
"Node has %s connection(s).\n"
"Click to show signals dock."
msgstr ""
+"Uzel má %s připojení.\n"
+"Kliknutím zobrazíte panel signálů."
#: editor/scene_tree_editor.cpp
msgid ""
"Node is in %s group(s).\n"
"Click to show groups dock."
msgstr ""
+"Uzel je v %s skupinách.\n"
+"Kliknutím zobrazíte panel skupin."
#: editor/scene_tree_editor.cpp
msgid "Open Script:"
@@ -10906,6 +10867,8 @@ msgid ""
"Children are not selectable.\n"
"Click to make selectable."
msgstr ""
+"Děti nelze vybrat.\n"
+"Kliknutím umožníte jejich vybrání."
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
@@ -10916,6 +10879,8 @@ msgid ""
"AnimationPlayer is pinned.\n"
"Click to unpin."
msgstr ""
+"AnimationPlayer je připnutý.\n"
+"Kliknutím odepnete."
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
@@ -10982,9 +10947,8 @@ msgid "Error loading script from %s"
msgstr "Chyba nahrávání skriptu z %s"
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Overrides"
-msgstr "Přepsat"
+msgstr "Přepisuje"
#: editor/script_create_dialog.cpp
msgid "N/A"
@@ -11011,23 +10975,20 @@ msgid "Invalid class name."
msgstr "Neplatné jméno třídy."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Invalid inherited parent name or path."
-msgstr "Neplatné jméno vlastnosti."
+msgstr "Neplatný název nebo cesta zděděné třídy."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Script path/name is valid."
-msgstr "Skript je validní."
+msgstr "Cesta a jméno skriptu jsou validní."
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
msgstr "Povoleno: a-z, A-Z, 0-9, _ a ."
#: editor/script_create_dialog.cpp
-#, fuzzy
msgid "Built-in script (into scene file)."
-msgstr "Možností scén."
+msgstr "Vestavěný skript (v souboru scény)."
#: editor/script_create_dialog.cpp
msgid "Will create a new script file."
@@ -11046,6 +11007,8 @@ msgid ""
"Note: Built-in scripts have some limitations and can't be edited using an "
"external editor."
msgstr ""
+"Poznámka: VestavÄ›né skripty mají urÄitá omezení a nelze je upravovat pomocí "
+"externího editoru."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -11061,7 +11024,7 @@ msgstr "Vestavěný skript:"
#: editor/script_create_dialog.cpp
msgid "Attach Node Script"
-msgstr ""
+msgstr "Připojit script k uzlu"
#: editor/script_editor_debugger.cpp
msgid "Remote "
@@ -11101,16 +11064,15 @@ msgstr "Zdroj C++:"
#: editor/script_editor_debugger.cpp
msgid "Stack Trace"
-msgstr ""
+msgstr "Trasování zásobníku"
#: editor/script_editor_debugger.cpp
msgid "Errors"
msgstr "Chyby"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Child process connected."
-msgstr "Odpojené uzly"
+msgstr "Připojen proces potomka."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -11121,21 +11083,20 @@ msgid "Video RAM"
msgstr "Video RAM"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Skip Breakpoints"
-msgstr "Vytvořit body."
+msgstr "PÅ™eskoÄit breakpointy"
#: editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
-msgstr ""
+msgstr "Zkontrolovat předchozí instanci"
#: editor/script_editor_debugger.cpp
msgid "Inspect Next Instance"
-msgstr ""
+msgstr "Zkontrolovat následující instanci"
#: editor/script_editor_debugger.cpp
msgid "Stack Frames"
-msgstr ""
+msgstr "Rámce zásobníku"
#: editor/script_editor_debugger.cpp
msgid "Profiler"
@@ -11147,7 +11108,7 @@ msgstr "Síťový profiler"
#: editor/script_editor_debugger.cpp
msgid "Monitor"
-msgstr ""
+msgstr "Monitor"
#: editor/script_editor_debugger.cpp
msgid "Value"
@@ -11155,24 +11116,23 @@ msgstr "Hodnota"
#: editor/script_editor_debugger.cpp
msgid "Monitors"
-msgstr ""
+msgstr "Monitory"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr ""
+msgstr "Vyberte jednu nebo více položek ze seznamu pro zobrazení grafu."
#: editor/script_editor_debugger.cpp
msgid "List of Video Memory Usage by Resource:"
-msgstr ""
+msgstr "Spotřeba video paměti dle zdroje:"
#: editor/script_editor_debugger.cpp
msgid "Total:"
msgstr "Celkem:"
#: editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Export list to a CSV file"
-msgstr "Exportovat profil"
+msgstr "Exportovat seznam do CSV"
#: editor/script_editor_debugger.cpp
msgid "Resource Path"
@@ -11196,38 +11156,35 @@ msgstr "Různé"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr ""
+msgstr "Klikací ovládací prvek:"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr ""
+msgstr "Typ klikacího prvku:"
#: editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
-msgstr ""
+msgstr "Kořen živých úprav:"
#: editor/script_editor_debugger.cpp
msgid "Set From Tree"
-msgstr ""
+msgstr "Nastavit ze stromu"
#: editor/script_editor_debugger.cpp
msgid "Export measures as CSV"
-msgstr ""
+msgstr "Exportovat měření do CSV"
#: editor/settings_config_dialog.cpp
-#, fuzzy
msgid "Erase Shortcut"
-msgstr "Zkratky"
+msgstr "Smazat zkratky"
#: editor/settings_config_dialog.cpp
-#, fuzzy
msgid "Restore Shortcut"
-msgstr "Zkratky"
+msgstr "Obnovit zkratky"
#: editor/settings_config_dialog.cpp
-#, fuzzy
msgid "Change Shortcut"
-msgstr "Upravit kotvy"
+msgstr "Upravit zkratky"
#: editor/settings_config_dialog.cpp
msgid "Editor Settings"
@@ -11239,7 +11196,7 @@ msgstr "Zkratky"
#: editor/settings_config_dialog.cpp
msgid "Binding"
-msgstr ""
+msgstr "Vazba"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Light Radius"
@@ -11247,7 +11204,7 @@ msgstr "Změnit rádius světla"
#: editor/spatial_editor_gizmos.cpp
msgid "Change AudioStreamPlayer3D Emission Angle"
-msgstr ""
+msgstr "Změnit úhel vysílání uzlu AudioStreamPlayer3D"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
@@ -11259,68 +11216,63 @@ msgstr "Změnit velikost kamery"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Notifier AABB"
-msgstr ""
+msgstr "Změnit AABB Notifier"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
-msgstr ""
+msgstr "ZmÄ›nit Äástice AABB"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
-msgstr ""
+msgstr "Změnit rozsahy Probe"
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
msgid "Change Sphere Shape Radius"
-msgstr ""
+msgstr "Změnit poloměr Sphere Shape"
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
msgid "Change Box Shape Extents"
-msgstr ""
+msgstr "Změnit rozsahy Box Shape"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Radius"
-msgstr ""
+msgstr "Změnit poloměr Capsule Shape"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Height"
-msgstr ""
+msgstr "Změnit výšku Capsule Shape"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Change Cylinder Shape Radius"
-msgstr "Změnit rádius světla"
+msgstr "Změnit poloměr Cylinder Shape"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Cylinder Shape Height"
-msgstr ""
+msgstr "Změnit výšku Cylinder Shape"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
-msgstr ""
+msgstr "Změnit délku Ray Shape"
#: modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "Change Cylinder Radius"
-msgstr "Změnit rádius světla"
+msgstr "Změnit poloměr Cylinder"
#: modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "Change Cylinder Height"
-msgstr "Změnit velikost kamery"
+msgstr "Změnit výšku Cylinder"
#: modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "Change Torus Inner Radius"
-msgstr "Změnit rádius světla"
+msgstr "Změnit vnitřní poloměr Torus"
#: modules/csg/csg_gizmos.cpp
-#, fuzzy
msgid "Change Torus Outer Radius"
-msgstr "Změnit rádius světla"
+msgstr "Změnit vnější poloměr Torus"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Select the dynamic library for this entry"
-msgstr ""
+msgstr "Vybrat dynamickou knihovnu pro tento záznam"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Select dependencies of the library for this entry"
@@ -11348,7 +11300,7 @@ msgstr "Dynamická knihovna"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Add an architecture entry"
-msgstr ""
+msgstr "Přidat záznam architektury"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "GDNativeLibrary"
@@ -11356,12 +11308,11 @@ msgstr "GDNativeLibrary"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Enabled GDNative Singleton"
-msgstr ""
+msgstr "Zapnutý GDNative Singleton"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
-#, fuzzy
msgid "Disabled GDNative Singleton"
-msgstr "Vypnout aktualizaÄní koleÄko"
+msgstr "Vypnutý GDNative Singleton"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Library"
@@ -11376,7 +11327,6 @@ msgid "GDNative"
msgstr "GDNative"
#: modules/gdscript/gdscript_functions.cpp
-#, fuzzy
msgid "Step argument is zero!"
msgstr "Argument kroku je nula!"
@@ -11413,30 +11363,28 @@ msgid "Object can't provide a length."
msgstr "Objekt nemůže poskytnout délku."
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Next Plane"
-msgstr "Další záložka"
+msgstr "Další rovina"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Previous Plane"
-msgstr "Předchozí záložka"
+msgstr "Předchozí rovina"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Plane:"
-msgstr ""
+msgstr "Rovina:"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Floor"
-msgstr ""
+msgstr "Další patro"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Previous Floor"
-msgstr ""
+msgstr "Předchozí patro"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Floor:"
-msgstr ""
+msgstr "Patro:"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Delete Selection"
@@ -11456,24 +11404,23 @@ msgstr "Vykreslit GridMap"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
-msgstr ""
+msgstr "Grid Map"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Snap View"
-msgstr ""
+msgstr "Přichytit pohled"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Clip Disabled"
-msgstr "Vypnuto"
+msgstr "Vypnout ořezávání"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Above"
-msgstr ""
+msgstr "Oříznout nahoře"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clip Below"
-msgstr ""
+msgstr "Oříznout dole"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Edit X Axis"
@@ -11489,36 +11436,35 @@ msgstr "Editovat osu Z"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate X"
-msgstr ""
+msgstr "X otoÄní kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Y"
-msgstr ""
+msgstr "Y otoÄení kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Z"
-msgstr ""
+msgstr "Z otoÄení kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
-msgstr ""
+msgstr "ZpÄ›tné X otoÄní kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Y"
-msgstr ""
+msgstr "ZpÄ›tné Y otoÄní kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Z"
-msgstr ""
+msgstr "ZpÄ›tné Z otoÄní kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Clear Rotation"
-msgstr ""
+msgstr "ZruÅ¡it otoÄní kurzoru"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Paste Selects"
-msgstr "Vymazat oznaÄené"
+msgstr "Vložit výběr"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clear Selection"
@@ -11542,7 +11488,7 @@ msgstr "Filtrovat meshe"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
-msgstr ""
+msgstr "PÅ™iÅ™aÄte uzlu GridMap zdroj MeshLibrary k použití jeho sítÄ›."
#: modules/mono/csharp_script.cpp
msgid "Class name can't be a reserved keyword"
@@ -11550,70 +11496,69 @@ msgstr "Název třídy nemůže být rezervované klíÄové slovo"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
-msgstr ""
+msgstr "Konec zásobníku trasování vnitřní výjimky"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Bake NavMesh"
-msgstr ""
+msgstr "Zapéct NavMesh"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr ""
+msgstr "Vymazat navigaÄní síť."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
-msgstr ""
+msgstr "Nastavuji konfiguraci..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Calculating grid size..."
-msgstr ""
+msgstr "PoÄítám velikost mřížky..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Creating heightfield..."
-msgstr ""
+msgstr "Vytvářím výškové pole..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Marking walkable triangles..."
-msgstr ""
+msgstr "VyznaÄuji průchozí trojúhelníky..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Constructing compact heightfield..."
-msgstr ""
+msgstr "Konstruuji kompaktní výškové pole..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Eroding walkable area..."
-msgstr ""
+msgstr "Eroduji průchozí oblast..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Partitioning..."
-msgstr ""
+msgstr "Rozděluji..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Creating contours..."
-msgstr ""
+msgstr "Vytvářím kontury..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Creating polymesh..."
-msgstr ""
+msgstr "Vytvářím polymesh..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Converting to native navigation mesh..."
-msgstr ""
+msgstr "PÅ™evádím na nativní navigaÄní mřížku..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr ""
+msgstr "Nastavení generátoru navigaÄní sítÄ›:"
#: modules/recast/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
-msgstr ""
+msgstr "Parsuji geometrii..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Done!"
msgstr "Hotovo!"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
@@ -11622,14 +11567,12 @@ msgstr ""
"jak správně používat yield!"
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr "Uzel zavolal yield, ale nevrátil stav funkce v první pracovní paměti."
#: modules/visual_script/visual_script.cpp
-#, fuzzy
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
@@ -11678,10 +11621,8 @@ msgid "Add Output Port"
msgstr "Přidat výstupní port"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Override an existing built-in function."
-msgstr ""
-"Neplatný název. Nesmí kolidovat s existujícím jménem zabudovaného typu."
+msgstr "Nahradit všechny existující vestavěné funkce."
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new function."
@@ -11765,29 +11706,25 @@ msgstr ""
"Podržte %s k uvolnění getteru. Podržte Shift k uvolnění generického podpisu."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Podržte Ctrl k uvolnění getteru. Podržte Shift k uvolnění generického "
-"podpisu."
+"Podržte Ctrl k vložení getteru. Podržte Shift k vložení generické signatury."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a simple reference to the node."
msgstr "Podržte %s k uvolnění jednoduché reference na uzel."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Hold Ctrl to drop a simple reference to the node."
msgstr "Podržte Ctrl k uvolnění jednoduché reference na uzel."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Hold %s to drop a Variable Setter."
-msgstr "Podržte %s k uvolnění jednoduché reference na uzel."
+msgstr "Podržte %s k uvolnění setteru proměnné."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
-msgstr ""
+msgstr "Podržte Ctrl k uvolnění setteru proměnné."
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Preload Node"
@@ -11802,6 +11739,8 @@ msgid ""
"Can't drop properties because script '%s' is not used in this scene.\n"
"Drop holding 'Shift' to just copy the signature."
msgstr ""
+"Nelze uvolnit vlastnosti, protože skript \"%s\" není použit ve scéně.\n"
+"Přestaňte držet \"Shift\", pro zkopírování jeho signatury."
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
@@ -11832,14 +11771,12 @@ msgid "Disconnect Nodes"
msgstr "Odpojit uzly"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Node Data"
-msgstr "Připojit uzly"
+msgstr "Připojit data uzlů"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Connect Node Sequence"
-msgstr "Připojit uzly"
+msgstr "Připojit sekvenci uzlů"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
@@ -11855,7 +11792,7 @@ msgstr "Změnit velikost komentáře"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't copy the function node."
-msgstr ""
+msgstr "Nelze zkopírovat uzel funkce."
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
@@ -11867,24 +11804,23 @@ msgstr "Vložit VisualScript uzly"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
-msgstr ""
+msgstr "Nelze vytvořit funkci s uzlem funkce."
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function of nodes from nodes of multiple functions."
-msgstr ""
+msgstr "Nelze vytvořit funkci uzlů z uzlů více funkcí."
#: modules/visual_script/visual_script_editor.cpp
msgid "Select at least one node with sequence port."
-msgstr ""
+msgstr "Vyberte alespoň jeden uzel s portem sekvencí."
#: modules/visual_script/visual_script_editor.cpp
msgid "Try to only have one sequence input in selection."
-msgstr ""
+msgstr "Zkus mít ozanÄenu pouze jednu vstupní sekvenci."
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Create Function"
-msgstr "Přejmenovat funkci"
+msgstr "Vytvořit funkci"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
@@ -11907,9 +11843,8 @@ msgid "Editing Signal:"
msgstr "Úprava signálu:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Make Tool:"
-msgstr "Místní"
+msgstr "EditaÄní nástroj:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Members:"
@@ -11932,9 +11867,8 @@ msgid "function_name"
msgstr "název_funkce"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Select or create a function to edit its graph."
-msgstr "Pro úpravu grafu vyber nebo vytvoř funkci"
+msgstr "Vyber nebo vytvoř funkci pro úpravu jejího grafu."
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete Selected"
@@ -12021,41 +11955,40 @@ msgstr ""
"posloupnost), nebo řetězec (chyba)."
#: modules/visual_script/visual_script_property_selector.cpp
-#, fuzzy
msgid "Search VisualScript"
-msgstr "Odstranit VisualScript uzel"
+msgstr "Hledat VisualScript"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Get %s"
-msgstr ""
+msgstr "Přijmi %d"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Set %s"
-msgstr ""
+msgstr "Nastav %s"
#: platform/android/export/export.cpp
msgid "Package name is missing."
-msgstr ""
+msgstr "Chybí jméno balíÄku."
#: platform/android/export/export.cpp
msgid "Package segments must be of non-zero length."
-msgstr ""
+msgstr "Jméno balíÄku musí být neprázdné."
#: platform/android/export/export.cpp
msgid "The character '%s' is not allowed in Android application package names."
-msgstr ""
+msgstr "Znak '%s' není povolen v názvu balíÄku Android aplikace."
#: platform/android/export/export.cpp
msgid "A digit cannot be the first character in a package segment."
-msgstr ""
+msgstr "Číslice nemůže být prvním znakem segmentu balíÄku."
#: platform/android/export/export.cpp
msgid "The character '%s' cannot be the first character in a package segment."
-msgstr ""
+msgstr "Znak '%s' nemůže být prvním znakem segmentu balíÄku."
#: platform/android/export/export.cpp
msgid "The package must have at least one '.' separator."
-msgstr ""
+msgstr "BalíÄek musí mít alespoň jeden '.' oddÄ›lovaÄ."
#: platform/android/export/export.cpp
msgid "Select device from the list"
@@ -12063,26 +11996,39 @@ msgstr "Vyberte zařízení ze seznamu"
#: platform/android/export/export.cpp
msgid "ADB executable not configured in the Editor Settings."
-msgstr ""
+msgstr "Spustitelný ADB není nakonfigurovaný v Nastavení Editoru."
#: platform/android/export/export.cpp
msgid "OpenJDK jarsigner not configured in the Editor Settings."
-msgstr ""
+msgstr "OpenJDK jarsigner není nakonfigurovaný v Nastavení Editoru."
#: platform/android/export/export.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
msgstr ""
+"ÚložiÅ¡tÄ› klíÄů k ladÄ›ní není nakonfigurováno v Nastavení editoru nebo v "
+"export profilu."
#: platform/android/export/export.cpp
msgid "Release keystore incorrectly configured in the export preset."
msgstr ""
+"ÚložiÅ¡tÄ› klíÄů pro vydání je nakonfigurováno nesprávnÄ› v profilu exportu."
#: platform/android/export/export.cpp
msgid "Custom build requires a valid Android SDK path in Editor Settings."
msgstr ""
+"Vlastní sestavení vyžaduje správnou cestu k sadě Android SDK v nastavení "
+"editoru."
#: platform/android/export/export.cpp
msgid "Invalid Android SDK path for custom build in Editor Settings."
+msgstr "Nesprávná cesta Android SDK pro vlastní sestavení v Nastavení editoru."
+
+#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
msgstr ""
#: platform/android/export/export.cpp
@@ -12090,63 +12036,93 @@ msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
msgstr ""
+"Šablona sestavení Androidu není pro projekt nainstalována. Nainstalujte jej "
+"z nabídky Projekt."
#: platform/android/export/export.cpp
msgid "Invalid public key for APK expansion."
-msgstr ""
+msgstr "Neplatný veÅ™ejný klÃ­Ä pro rozšíření APK."
#: platform/android/export/export.cpp
-#, fuzzy
msgid "Invalid package name:"
-msgstr "Neplatné jméno třídy"
+msgstr "Neplatné jméno balíÄku:"
#: platform/android/export/export.cpp
msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
+"Neplatný modul \"GodotPaymentV3\" v nastavení projektu \"Android / moduly"
+"\" (změněno v Godot 3.2.2).\n"
#: platform/android/export/export.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
msgstr ""
+"Chcete-li používat doplňky, musí být povoleno \"použít vlastní build\"."
#: platform/android/export/export.cpp
msgid ""
"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
"\"."
msgstr ""
+"\"Stupně svobody\" je platné pouze v případě, že \"Xr Mode\" je \"Oculus "
+"Mobile VR\"."
#: platform/android/export/export.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
+"\"Hand Tracking\" je platné pouze v případě, že \"Režim Xr\" má hodnotu "
+"\"Oculus Mobile VR\"."
#: platform/android/export/export.cpp
msgid ""
"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
msgstr ""
+"\"Focus Awareness\" je platné pouze v případě, že \"Režim Xr\" má hodnotu "
+"\"Oculus Mobile VR\"."
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"\"Export AAB\" je validní pouze v případě, že je povolena možnost \"Použít "
+"vlastní sestavu\"."
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "Neplatné jméno souboru! Android App Bundle vyžaduje příponu *.aab."
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "Rozšíření APK není kompatibilní s Android App Bundle."
+
+#: platform/android/export/export.cpp
+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.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
+"Pokus o sestavení z vlastní šablony, ale neexistují pro ni žádné informace o "
+"verzi. Přeinstalujte jej z nabídky \"Projekt\"."
#: platform/android/export/export.cpp
msgid ""
@@ -12155,52 +12131,58 @@ msgid ""
" Godot Version: %s\n"
"Please reinstall Android build template from 'Project' menu."
msgstr ""
+"Neshoda verzí Android buildu:\n"
+" Šablona nainstalována: %s\n"
+" Verze Godot: %s\n"
+"Přeinstalujte šablonu pro sestavení systému Android z nabídky \"Projekt\"."
#: platform/android/export/export.cpp
msgid "Building Android Project (gradle)"
-msgstr ""
+msgstr "Buildování projektu pro Android (gradle)"
#: platform/android/export/export.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
+"Buildování projektu pro Android se nezdařilo, zkontrolujte chybový výstup.\n"
+"Případně navštivte dokumentaci o build pro Android na docs.godotengine.org."
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "Přesunout výstup"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Nelze kopírovat Äi pÅ™ejmenovat exportovaný soubor, zkontrolujte výstupy v "
+"adresáři projektu gradle."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
-msgstr ""
+msgstr "Chybí identifikátor."
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "The character '%s' is not allowed in Identifier."
-msgstr "Jméno není platný identifikátor:"
+msgstr "Znak '%s' není dovolen v identifikátoru."
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
-msgstr ""
+msgstr "App Store Team ID nebyla poskytnuta - projekt nelze konfigurovat."
#: platform/iphone/export/export.cpp
-#, fuzzy
msgid "Invalid Identifier:"
-msgstr "Jméno není platný identifikátor:"
+msgstr "Neplatný identifikátor:"
#: platform/iphone/export/export.cpp
msgid "Required icon is not specified in the preset."
-msgstr ""
+msgstr "V profilu není nastavena požadovaná ikona."
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
-msgstr ""
+msgstr "Zastavit HTTP Server"
#: platform/javascript/export/export.cpp
msgid "Run in Browser"
@@ -12223,34 +12205,28 @@ msgid "Invalid export template:"
msgstr "Neplatná šablona pro export:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read custom HTML shell:"
-msgstr "Nelze vytvořit složku."
+msgstr "Nebylo možné pÅ™eÄíst HTML shell:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read boot splash image file:"
-msgstr "Nelze vytvořit složku."
+msgstr "Nebylo možné naÄíst soubor splash obrázku:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Using default boot splash image."
-msgstr "Nelze vytvořit složku."
+msgstr "Používám výchozí splash obrázek."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package short name."
-msgstr "Neplatné jméno třídy"
+msgstr "Neplatné krátké jméno balíÄku."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package unique name."
-msgstr "Neplatný unikátní název."
+msgstr "Neplatný unikátní název balíÄku."
#: platform/uwp/export/export.cpp
-#, fuzzy
msgid "Invalid package publisher display name."
-msgstr "Neplatný unikátní název."
+msgstr "Neplatný unikátní název vydavatele balíÄku."
#: platform/uwp/export/export.cpp
msgid "Invalid product GUID."
@@ -12293,13 +12269,12 @@ msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr "Neplatné rozměry obrázku uvítací obrazovky (měly by být 620x300)."
#: scene/2d/animated_sprite.cpp
-#, fuzzy
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite to display frames."
msgstr ""
"Aby AnimatedSprite mohl zobrazovat snímky, zdroj SpriteFrames musí být "
-"vytvořen nebo nastaven v vlastnosti 'Frames'."
+"vytvořen nebo nastaven v vlastnosti \"Frames\"."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -12348,30 +12323,33 @@ msgstr ""
"jejich tvaru."
#: scene/2d/collision_shape_2d.cpp
-#, fuzzy
msgid ""
"A shape must be provided for CollisionShape2D to function. Please create a "
"shape resource for it!"
-msgstr "CollisionShape2D musí obsahovat tvar. Prosím vytvořte zdrojový tvar."
+msgstr ""
+"CollisionShape2D funkce musí obsahovat tvar. Prosím vytvořte zdrojový tvar!"
#: scene/2d/collision_shape_2d.cpp
msgid ""
"Polygon-based shapes are not meant be used nor edited directly through the "
"CollisionShape2D node. Please use the CollisionPolygon2D node instead."
msgstr ""
+"Polygonové tvary nejsou urÄeny k použití nebo úpravám přímo prostÅ™ednictvím "
+"uzlu CollisionShape2D. Použijte uzel CollisionPolygon2D."
#: scene/2d/cpu_particles_2d.cpp
msgid ""
"CPUParticles2D animation requires the usage of a CanvasItemMaterial with "
"\"Particles Animation\" enabled."
msgstr ""
+"Animace CPUParticles2D vyžaduje použití CanvasItemMaterial se zapnutým "
+"\"Particles Animation\"."
#: scene/2d/light_2d.cpp
-#, fuzzy
msgid ""
"A texture with the shape of the light must be supplied to the \"Texture\" "
"property."
-msgstr "Textura světla musí být nastavena vlastností 'texture'."
+msgstr "Textura tvaru světla musí být nastavena vlastností 'texture'."
#: scene/2d/light_occluder_2d.cpp
msgid ""
@@ -12381,7 +12359,7 @@ msgstr ""
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon."
-msgstr ""
+msgstr "Stínový polygon pro toto stínítko je prázdný. Nakreslete polygon."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -12411,18 +12389,24 @@ msgid ""
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles\" option for this purpose."
msgstr ""
+"Grafický ovladaÄ GLES2 nepodporuje Äástice založené na GPU.\n"
+"Použijte uzel CPUParticles2D. Na převod lze použít \"Převést na CPUParticles"
+"\"."
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
"A material to process the particles is not assigned, so no behavior is "
"imprinted."
msgstr ""
+"Nebyl pÅ™iÅ™azen žádný materiál pro zpracování Äástic, takže nebudou viditelné."
#: scene/2d/particles_2d.cpp
msgid ""
"Particles2D animation requires the usage of a CanvasItemMaterial with "
"\"Particles Animation\" enabled."
msgstr ""
+"Animace Particles2D vyžaduje použití CanvasItemMaterial se zapnutou funkcí "
+"\"Animace Äástic\"."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
@@ -12434,6 +12418,9 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
+"Změny velikosti v RigidBody2D (ve znakovém nebo rigidním režimu) budou za "
+"běhu přepsány fyzikálním enginem.\n"
+"Změňte velikost kolizních tvarů v uzlech potomků."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
@@ -12442,65 +12429,68 @@ msgstr ""
#: scene/2d/skeleton_2d.cpp
msgid "This Bone2D chain should end at a Skeleton2D node."
-msgstr ""
+msgstr "Tento Bone2D Å™etÄ›z by mÄ›l konÄit uzlem Skeleton2D."
#: scene/2d/skeleton_2d.cpp
msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node."
msgstr ""
+"Uzel Bone2D funguje pouze s nadřazeným uzlem Skeleton2D nebo jiným Bone2D."
#: scene/2d/skeleton_2d.cpp
msgid ""
"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one."
msgstr ""
+"Této kosti chybí správná klidová póza. Přejděte na uzel Skeleton2D a "
+"nastavte jej."
#: scene/2d/tile_map.cpp
-#, fuzzy
msgid ""
"TileMap with Use Parent on needs a parent CollisionObject2D to give shapes "
"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
"KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionPolygon2D slouží pouze jako kontejner tvarů objektu "
-"CollissionObject2D a od něj odvozených uzlů. Použijte ho pouze jako potomka "
-"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a dalších, pro urÄení "
-"jejich tvaru."
+"TileMap \"Use Parent\" potřebuje nadřazený CollisionObject2D uzel. Použijte "
+"ho pouze jako potomka Area2D, StaticBody2D, RigidBody2D, KinematicBody2D a "
+"dalších, pro urÄení jejich tvaru."
#: scene/2d/visibility_notifier_2d.cpp
-#, fuzzy
msgid ""
"VisibilityEnabler2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
-"VisibilityEnable2D funguje nejlépe, když je nastaven jako rodiÄ editované "
-"scény."
+"VisibilityEnable2D funguje nejlépe, když je přímo pod kořenem aktuálně "
+"upravované scény."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent."
-msgstr ""
+msgstr "ARVRCamera musí mít uzel ARVROrigin jako rodiÄe."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRController must have an ARVROrigin node as its parent."
-msgstr ""
+msgstr "ARVRController musí mít uzel ARVROrigin jako rodiÄe."
#: scene/3d/arvr_nodes.cpp
msgid ""
"The controller ID must not be 0 or this controller won't be bound to an "
"actual controller."
msgstr ""
+"ID ovladaÄe nemůže být 0, jinak nebude ovladaÄ pÅ™iÅ™azen žádnému skuteÄnému "
+"ovladaÄi."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent."
-msgstr ""
+msgstr "ARVRAnchor musí mít uzel ARVROrigin jako rodiÄe."
#: scene/3d/arvr_nodes.cpp
msgid ""
"The anchor ID must not be 0 or this anchor won't be bound to an actual "
"anchor."
msgstr ""
+"ID kotvy nemůže být 0, jinak tato kotva nebude pÅ™iÅ™azena skuteÄné kotvÄ›."
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
-msgstr ""
+msgstr "ARVROrigin musí mít uzel ARVRCamera jako potomka."
#: scene/3d/baked_lightmap.cpp
msgid "%d%%"
@@ -12512,19 +12502,19 @@ msgstr "(Zbývající Äas: %d:%02d s)"
#: scene/3d/baked_lightmap.cpp
msgid "Plotting Meshes: "
-msgstr ""
+msgstr "Vykreslení mřížek: "
#: scene/3d/baked_lightmap.cpp
msgid "Plotting Lights:"
-msgstr ""
+msgstr "Vykreslení světel:"
#: scene/3d/baked_lightmap.cpp scene/3d/gi_probe.cpp
msgid "Finishing Plot"
-msgstr ""
+msgstr "DokonÄování vykreslení"
#: scene/3d/baked_lightmap.cpp
msgid "Lighting Meshes: "
-msgstr ""
+msgstr "Osvětlení sítí: "
#: scene/3d/collision_object.cpp
msgid ""
@@ -12562,53 +12552,58 @@ msgstr ""
"a KinematicBody, abyste jim dali tvar."
#: scene/3d/collision_shape.cpp
-#, fuzzy
msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it."
msgstr ""
"Aby CollisionShape mohl fungovat, musí mu být poskytnut tvar. Vytvořte mu "
-"prosím zdroj tvar!"
+"prosím zdroj tvar."
#: scene/3d/collision_shape.cpp
msgid ""
"Plane shapes don't work well and will be removed in future versions. Please "
"don't use them."
msgstr ""
+"Tvary Plane nepracují dobře a budou v budoucím vydání odstraněny. "
+"Nepoužívejte je."
#: scene/3d/collision_shape.cpp
msgid ""
"ConcavePolygonShape doesn't support RigidBody in another mode than static."
-msgstr ""
+msgstr "ConcavePolygonShape nepodporuje uzel RigidBody v nestatickém režimu."
#: scene/3d/cpu_particles.cpp
msgid "Nothing is visible because no mesh has been assigned."
-msgstr ""
+msgstr "Nic není zobrazeno, protože nebyla přiřazena žádná mřížka."
#: scene/3d/cpu_particles.cpp
msgid ""
"CPUParticles animation requires the usage of a SpatialMaterial whose "
"Billboard Mode is set to \"Particle Billboard\"."
msgstr ""
+"Animace CPUParticles vyžaduje použití SpatialMaterial, jehož režim Billboard "
+"je nastaven na \"Particle Billboard\"."
#: scene/3d/gi_probe.cpp
msgid "Plotting Meshes"
-msgstr ""
+msgstr "Vykreslení sítí"
#: scene/3d/gi_probe.cpp
msgid ""
"GIProbes are not supported by the GLES2 video driver.\n"
"Use a BakedLightmap instead."
msgstr ""
+"Video driver GLES2 nepodporuje GIProby.\n"
+"Místo toho použijte BakedLightmap."
#: scene/3d/interpolated_camera.cpp
msgid ""
"InterpolatedCamera has been deprecated and will be removed in Godot 4.0."
-msgstr ""
+msgstr "Uzel InterpolatedCamera je zastaralý a bude odstraněn v Godot 4.0."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
-msgstr ""
+msgstr "SpotLight s úhlem širším než 90 stupňů nemůže vrhat stíny."
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
@@ -12630,17 +12625,23 @@ msgid ""
"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
"\" option for this purpose."
msgstr ""
+"Video driver GLES2 nepodporuje Äástice na GPU.\n"
+"Místo toho použijte uzel CPUParticles. K převodu můžete použít \"Převést na "
+"CPUParticles\"."
#: scene/3d/particles.cpp
msgid ""
"Nothing is visible because meshes have not been assigned to draw passes."
msgstr ""
+"Nic není viditelné, protože mřížky nebyly přiřazeny do vykreslovací fronty."
#: scene/3d/particles.cpp
msgid ""
"Particles animation requires the usage of a SpatialMaterial whose Billboard "
"Mode is set to \"Particle Billboard\"."
msgstr ""
+"Animace Äástic vyžaduje použití SpatialMaterial, kde režim Billboard je "
+"nastaven na \"Částicový billboard\"."
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
@@ -12651,6 +12652,8 @@ msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
+"Vlastnost ROTATION_ORIENTED uzlu PathFollow vyžaduje povolení \"Up Vector\" "
+"ve zdroji Curve nadřazeného uzlu Path."
#: scene/3d/physics_body.cpp
msgid ""
@@ -12658,19 +12661,21 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
+"Změny velikosti v RigidBody (ve znakovém nebo rigidním režimu) budou za běhu "
+"přepsány fyzikálním enginem.\n"
+"Změňte velikost kolizních tvarů v uzlech potomků."
#: scene/3d/remote_transform.cpp
-#, fuzzy
msgid ""
"The \"Remote Path\" property must point to a valid Spatial or Spatial-"
"derived node to work."
msgstr ""
-"Aby ParticleAttractor2D fungoval, musí vlastnost path ukazovat na platný "
-"uzel Particles2D."
+"Vlastnost \"Remote Path\" musí ukazovat na platný Spatial nebo Spatial-"
+"derived uzel."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
-msgstr ""
+msgstr "Toto tělo bude ignorováno dokud nenastavíte síť."
#: scene/3d/soft_body.cpp
msgid ""
@@ -12678,16 +12683,15 @@ msgid ""
"running.\n"
"Change the size in children collision shapes instead."
msgstr ""
-"Změny velikosti SoftBody budou za běhu přepsány fyzikálním enginem.\n"
-"Změňte místo něho velikost kolizních tvarů potomků."
+"Změny velikosti v SoftBody budou za běhu přepsány fyzikálním enginem.\n"
+"Změňte velikost kolizních tvarů v uzlech potomků."
#: scene/3d/sprite_3d.cpp
-#, fuzzy
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti 'Frames', "
+"Zdroj SpriteFrames musí být vytvořen nebo nastaven ve vlastnosti \"Frames\", "
"aby mohl AnimatedSprite3D zobrazit rámeÄky."
#: scene/3d/vehicle_body.cpp
@@ -12703,6 +12707,8 @@ msgid ""
"WorldEnvironment requires its \"Environment\" property to contain an "
"Environment to have a visible effect."
msgstr ""
+"WorldEnvironment vyžaduje nastavenou vlastnost \"Prostředí\", aby měl "
+"viditelný efekt."
#: scene/3d/world_environment.cpp
msgid ""
@@ -12716,10 +12722,12 @@ msgid ""
"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set "
"this environment's Background Mode to Canvas (for 2D scenes)."
msgstr ""
+"Tento WorldEnvironment je ignorován. BuÄ pÅ™idejte kameru (pro 3D scény) nebo "
+"nastavte plátnu tohoto prostředí Režim pozadí (pro 2D scény)."
#: scene/animation/animation_blend_tree.cpp
msgid "On BlendTree node '%s', animation not found: '%s'"
-msgstr ""
+msgstr "Na uzlu BlendTree \"%s\" nebyla nalezena animace: \"%s\""
#: scene/animation/animation_blend_tree.cpp
msgid "Animation not found: '%s'"
@@ -12734,31 +12742,28 @@ msgid "Invalid animation: '%s'."
msgstr "Neplatná animace: '%s'."
#: scene/animation/animation_tree.cpp
-#, fuzzy
msgid "Nothing connected to input '%s' of node '%s'."
-msgstr "Odpojit '%s' od '%s'"
+msgstr "Nic není připojeno do vstupu '%s' uzlu '%s'."
#: scene/animation/animation_tree.cpp
msgid "No root AnimationNode for the graph is set."
-msgstr ""
+msgstr "Není nastaven žádný kořen grafu AnimationNode."
#: scene/animation/animation_tree.cpp
-#, fuzzy
msgid "Path to an AnimationPlayer node containing animations is not set."
-msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer."
+msgstr "Cesta k uzlu AnimationPlayer obsahující animace není nastavena."
#: scene/animation/animation_tree.cpp
msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node."
-msgstr ""
+msgstr "Cesta k AnimationPlayer nevede k uzlu AnimationPlayer."
#: scene/animation/animation_tree.cpp
-#, fuzzy
msgid "The AnimationPlayer root node is not a valid node."
-msgstr "Strom animace je neplatný."
+msgstr "Kořenový uzel AnimationPlayer není platný uzel."
#: scene/animation/animation_tree_player.cpp
msgid "This node has been deprecated. Use AnimationTree instead."
-msgstr ""
+msgstr "Podpora tohoto uzlu byla ukonÄena. Použijte místo nÄ›ho AnimationTree."
#: scene/gui/color_picker.cpp
msgid ""
@@ -12766,11 +12771,13 @@ msgid ""
"LMB: Set color\n"
"RMB: Remove preset"
msgstr ""
+"Barva: #%s\n"
+"LTM: Nastavit barvu\n"
+"PTM: Odstranit přednastavení"
#: scene/gui/color_picker.cpp
-#, fuzzy
msgid "Pick a color from the editor window."
-msgstr "Vyberte barvu z obrazovky."
+msgstr "Vyberte barvu z okna editoru."
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12794,12 +12801,18 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
+"Kontejner sám o sobÄ› neslouží žádnému úÄelu, pokud nÄ›jaký skript "
+"nenakonfiguruje nastavení podřízených uzlů.\n"
+"Pokud se chystáte přidat skript, použijte běžný ovládací uzel."
#: scene/gui/control.cpp
msgid ""
"The Hint Tooltip won't be displayed as the control's Mouse Filter is set to "
"\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."
msgstr ""
+"Tip nápovědy se nezobrazí, protože filtr myši je nastaven na \"Ignorovat\". "
+"Chcete-li tento problém vyřešit, nastavte filtr myši na \"Stop\" nebo \"Pass"
+"\"."
#: scene/gui/dialogs.cpp
msgid "Alert!"
@@ -12810,7 +12823,6 @@ msgid "Please Confirm..."
msgstr "PotvrÄte prosím..."
#: scene/gui/popup.cpp
-#, fuzzy
msgid ""
"Popups will hide by default unless you call popup() or any of the popup*() "
"functions. Making them visible for editing is fine, but they will hide upon "
@@ -12821,9 +12833,9 @@ msgstr ""
"budou skryty."
#: scene/gui/range.cpp
-#, fuzzy
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
-msgstr "Pokud má exp_edit hodnotu true, pak min_value musí být > 0."
+msgstr ""
+"Pokud má \"Exp Edit\" hodnotu true, pak \"Min Value\" musí být větší než 0."
#: scene/gui/scroll_container.cpp
msgid ""
@@ -12831,13 +12843,15 @@ msgid ""
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
+"ScrollContainer je navržen tak, aby běžel s jedním ovládacím potomkem.\n"
+"Použijte kontejner (VBox, HBox atd.) nebo uzel Control jako potomka a "
+"nastavte minimální velikost ruÄnÄ›."
#: scene/gui/tree.cpp
msgid "(Other)"
msgstr "(Ostatní)"
#: scene/main/scene_tree.cpp
-#, fuzzy
msgid ""
"Default Environment as specified in Project Settings (Rendering -> "
"Environment -> Default Environment) could not be loaded."
@@ -12871,9 +12885,8 @@ msgid "Invalid source for shader."
msgstr "Neplatný zdroj pro shader."
#: scene/resources/visual_shader_nodes.cpp
-#, fuzzy
msgid "Invalid comparison function for that type."
-msgstr "Neplatný zdroj pro shader."
+msgstr "Neplatná funkce pro porovnání tohoto typu."
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
@@ -12891,6 +12904,12 @@ msgstr "Odlišnosti mohou být přiřazeny pouze ve vertex funkci."
msgid "Constants cannot be modified."
msgstr "Konstanty není možné upravovat."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Chyba při pokusu uložit rozložení!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Výchozí rozložení editoru přepsáno."
+
#~ msgid "Move pivot"
#~ msgstr "Přemístit pivot"
diff --git a/editor/translations/da.po b/editor/translations/da.po
index 86e6965237..f96f3c5905 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -1081,14 +1081,18 @@ msgstr "Ejere af:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Fjern de valgte filer fra projektet? (ej fortrydes)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"De filer der fjernes er nødvendige for, at andre ressourcer kan fungere.\n"
"Fjern dem alligevel? (ej fortrydes)"
@@ -2393,19 +2397,25 @@ msgid "Error saving TileSet!"
msgstr "Fejl, kan ikke gemme TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Fejl, under forsøg på at gemme layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Standard editor layout overskrevet."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Layout navn er ikke fundet!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Gendannet standardlayout til grundindstillinger."
#: editor/editor_node.cpp
@@ -3868,6 +3878,11 @@ msgstr "Flyt Til..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Flyt Autoload"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Ny Scene"
@@ -12340,6 +12355,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12385,6 +12408,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13138,6 +13177,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstanter kan ikke ændres."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Fejl, under forsøg på at gemme layout!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Standard editor layout overskrevet."
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "Fjern punkt"
diff --git a/editor/translations/de.po b/editor/translations/de.po
index ef5f8499ef..9800366eb2 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -61,12 +61,13 @@
# Leon Marz <leon.marz@kabelmail.de>, 2020.
# Patric Wust <patric.wust@gmx.de>, 2020.
# Jonathan Hassel <jonathan.hassel@icloud.com>, 2020.
+# Artur Schönfeld <schoenfeld.artur@ymail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-07 14:20+0000\n"
-"Last-Translator: Günther Bohn <ciscouser@gmx.de>\n"
+"PO-Revision-Date: 2020-11-17 11:07+0000\n"
+"Last-Translator: Artur Schönfeld <schoenfeld.artur@ymail.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
"Language: de\n"
@@ -74,7 +75,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.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1088,16 +1089,21 @@ msgid "Owners Of:"
msgstr "Besitzer von:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Ausgewählte Dateien aus dem Projekt entfernen? (Kann nicht rückgängig "
"gemacht werden)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Andere Ressourcen benötigen die zu entfernenden Dateien, um richtig zu "
"funktionieren.\n"
@@ -1656,34 +1662,32 @@ msgstr ""
"Fallback Enabled‘ ausschalten."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"Die Zielplattform benötigt ‚ETC‘-Texturkompression für GLES2. Bitte in den "
-"Projekteinstellungen ‚Import Etc‘ aktivieren."
+"Die Zielplattform benötigt ‚PVRTC‘-Texturkompression für GLES2. Bitte in den "
+"Projekteinstellungen ‚Import Pvrtc‘ aktivieren."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"Die Zielplattform benötigt ‚ETC2‘-Texturkompression für GLES2. Bitte in den "
-"Projekteinstellungen aktivieren."
+"Die Zielplattform benötigt ‚ETC2‘- oder ‚PVRTC’-Texturkompression für GLES2. "
+"Bitte in den Projekteinstellungen ‚Import Etc 2‘ oder ‚Import Pvrtc‘ "
+"aktivieren."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"Die Zielplattform benötigt ‚ETC‘-Texturkompression für den Treiber-Fallback "
-"auf GLES2. \n"
-"Bitte ‚Import Etc‘ in den Projekteinstellungen aktivieren oder ‚Driver "
+"Die Zielplattform benötigt ‚PVRTC‘-Texturkompression für den Treiber-"
+"Fallback auf GLES2. \n"
+"Bitte ‚Import Pvrtc‘ in den Projekteinstellungen aktivieren oder ‚Driver "
"Fallback Enabled‘ ausschalten."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -2369,19 +2373,25 @@ msgid "Error saving TileSet!"
msgstr "Fehler beim Speichern des TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Fehler beim Speichern des Layouts!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Standard-Editorlayout überschrieben."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Layout-Name nicht gefunden!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Layout wurde auf die Standardeinstellungen zurückgesetzt."
#: editor/editor_node.cpp
@@ -3830,6 +3840,11 @@ msgid "Move To..."
msgstr "Verschiebe zu..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Autoload verschieben"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Neue Szene…"
@@ -5299,50 +5314,43 @@ msgstr "Neue horizontale und vertikale Hilfslinien erstellen"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Pivot-Offset des CanvasItems „%s“ auf (%d, %d) setzen"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "CanvasItem rotieren"
+msgstr "%d CanvasItems rotieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "CanvasItem rotieren"
+msgstr "CanvasItem „%s“ auf %d Grad rotieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "CanvasItem verschieben"
+msgstr "Anker des CanvasItems „%s“ verschieben"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Node2D „%s“ auf (%s, %s) skalieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Control „%s“ auf (%d, %d) skalieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "CanvasItem skalieren"
+msgstr "%d CanvasItems skalieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "CanvasItem skalieren"
+msgstr "CanvasItem „%s“ auf (%s, %s) skalieren"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "CanvasItem verschieben"
+msgstr "%d CanvasItems verschieben"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "CanvasItem verschieben"
+msgstr "CanvasItem „%s“ zu (%d, d%) verschieben"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5754,11 +5762,11 @@ msgid ""
"Keys are only added to existing tracks, no new tracks will be created.\n"
"Keys must be inserted manually for the first time."
msgstr ""
-"Füge automatisiert Schlüsselbilder ein wenn Objekte verschoben, rotiert oder "
-"skaliert werden (basierend auf Maske).\n"
+"Füge automatisiert Schlüsselbilder ein, wenn Objekte verschoben, rotiert "
+"oder skaliert werden (basierend auf Maske).\n"
"Schlüsselbilder werden nur in existierende Spuren eingefügt, es werden keine "
"neuen Spuren angelegt.\n"
-"Das erste mal müssen Schlüsselbilder manuell eingefügt werden."
+"Beim ersten Mal müssen Schlüsselbilder manuell eingefügt werden."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Auto Insert Key"
@@ -6301,7 +6309,7 @@ msgstr "Aufwärts-Achse des Meshs:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Rotation:"
-msgstr "Zufällige Rotation:"
+msgstr "Zufällige Drehung:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Tilt:"
@@ -6309,7 +6317,7 @@ msgstr "Zufälliges Kippen:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Scale:"
-msgstr "Zufällige Skalierung:"
+msgstr "Zufälliges Skalieren:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate"
@@ -6631,16 +6639,14 @@ msgid "Move Points"
msgstr "Punkte Verschieben"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Ziehen = Rotieren"
+msgstr "Strg: Rotieren"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: Alle verschieben"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
msgstr "Shift+Strg: Skalieren"
@@ -6689,14 +6695,12 @@ msgid "Radius:"
msgstr "Radius:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Polygon und UV erstellen"
+msgstr "Polygon zu UV kopieren"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Zu Polygon2D umwandeln"
+msgstr "Polygon zu UV kopieren"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8251,13 +8255,12 @@ msgid "Paint Tile"
msgstr "Kachel zeichnen"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Umsch+RMT: Linie zeichnen\n"
-"Umsch+Strg+RMT: Rechteck bemalen"
+"Umsch+LMT: Linie zeichnen\n"
+"Umsch+Strg+LMT: Rechteck bemalen"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8788,9 +8791,8 @@ msgid "Add Node to Visual Shader"
msgstr "Visual Shader-Node hinzufügen"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Node verschoben"
+msgstr "Node(s) verschoben"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8810,9 +8812,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "Visual-Shader-Eingabetyp geändert"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Uniform-Name festlegen"
+msgstr "UniformRef-Name geändert"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9531,7 +9532,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "Eine Referenz zu einem existierenden Uniform."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -10550,7 +10551,7 @@ msgstr "Aktueller Szenenname"
#: editor/rename_dialog.cpp
msgid "Root node name"
-msgstr "Name des Root-Nodes"
+msgstr "Name des Wurzel-Nodes"
#: editor/rename_dialog.cpp
msgid ""
@@ -10758,7 +10759,7 @@ msgstr "Node „%s“ löschen?"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
-msgstr "Lässt sich nicht an Root-Node ausführen."
+msgstr "Lässt sich nicht an Wurzel-Node ausführen."
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
@@ -10924,7 +10925,7 @@ msgid ""
"exists."
msgstr ""
"Instantiiere eine Szenendatei als Node. Erzeugt eine geerbte Szene falls "
-"kein Root-Node existiert."
+"kein Wurzel-Node existiert."
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script to the selected node."
@@ -12180,6 +12181,14 @@ msgstr ""
"Ungültiger Android-SDK-Pfad für eigene Builds in den Editoreinstellungen."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12232,19 +12241,38 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr "„Export AAB“ ist nur gültig wenn „Use Custom Build“ aktiviert ist."
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
msgstr ""
#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"Ungültiger Dateiname. Android App Bundles benötigen .aab als "
+"Dateinamenendung."
#: platform/android/export/export.cpp
msgid "APK Expansion not compatible with Android App Bundle."
-msgstr ""
+msgstr "APK-Expansion ist nicht kompatibel mit Android App Bundles."
#: platform/android/export/export.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
+"Ungültiger Dateiname. Android APKs benötigen .apk als Dateinamenendung."
#: platform/android/export/export.cpp
msgid ""
@@ -12283,13 +12311,15 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "Verschiebe Ausgabe"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Exportdatei kann nicht kopiert und umbenannt werden. Fehlermeldungen sollten "
+"im Gradle Projektverzeichnis erscheinen."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -13075,6 +13105,12 @@ msgstr "Varyings können nur in Vertex-Funktion zugewiesen werden."
msgid "Constants cannot be modified."
msgstr "Konstanten können nicht verändert werden."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Fehler beim Speichern des Layouts!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Standard-Editorlayout überschrieben."
+
#~ msgid "Move pivot"
#~ msgstr "Pivotpunkt bewegen"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index f32995d2e6..818ad7ea7a 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -995,14 +995,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2227,11 +2230,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2239,7 +2247,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3578,6 +3586,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11554,6 +11566,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11598,6 +11618,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/el.po b/editor/translations/el.po
index b006707169..1a8e7501ee 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -1040,14 +1040,19 @@ msgid "Owners Of:"
msgstr "Ιδιοκτήτες του:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "ΑφαίÏεση επιλεγμένων αÏχείων από το έÏγο; (Αδυναμία αναίÏεσης)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Τα αÏχεία που αφαιÏοÏνται απαιτοÏνται από άλλους πόÏους για να δουλέψουν.\n"
"Îα αφαιÏεθοÏν; (ΑδÏνατη η αναίÏεση)"
@@ -2314,19 +2319,25 @@ msgid "Error saving TileSet!"
msgstr "Σφάλμα κατά την αποθήκευση TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Σφάλμα κατά την αποθήκευση διάταξης!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Η Ï€Ïοεπιλεγμένη διάταξη του editor έχει παÏακαμφθεί."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Το όνομα της διάταξης δεν βÏέθηκε!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "ΕπαναφοÏά της Ï€Ïοεπιλεγμένης διάταξης στις βασικές Ïυθμίσεις."
#: editor/editor_node.cpp
@@ -3780,6 +3791,11 @@ msgid "Move To..."
msgstr "Μετακίνηση σε..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Μετακίνηση AutoLoad"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Îέα Σκηνή..."
@@ -12137,6 +12153,14 @@ msgstr ""
"ΕπεξεÏγαστή."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12192,6 +12216,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13016,6 +13056,12 @@ msgstr "Τα «varying» μποÏοÏν να ανατεθοÏν μόνο στηÎ
msgid "Constants cannot be modified."
msgstr "Οι σταθεÏές δεν μποÏοÏν να Ï„ÏοποποιηθοÏν."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Σφάλμα κατά την αποθήκευση διάταξης!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Η Ï€Ïοεπιλεγμένη διάταξη του editor έχει παÏακαμφθεί."
+
#~ msgid "Move pivot"
#~ msgstr "Μετακίνηση πηγαίου σημείου"
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index 3e99fade73..8f1b586a9a 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -1035,14 +1035,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2292,20 +2295,24 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-#, fuzzy
-msgid "Default editor layout overridden."
-msgstr "Automatan aranÄon de editilo transpasis."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3688,6 +3695,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nova sceno..."
@@ -11734,6 +11745,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11778,6 +11797,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12452,6 +12487,10 @@ msgid "Constants cannot be modified."
msgstr "Konstantoj ne povas esti modifitaj."
#, fuzzy
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Automatan aranÄon de editilo transpasis."
+
+#, fuzzy
#~ msgid "Pack File"
#~ msgstr "Malfermi dosieron"
diff --git a/editor/translations/es.po b/editor/translations/es.po
index ceaf9b9c7b..2922f2f4cf 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -56,8 +56,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-15 17:26+0000\n"
-"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
+"PO-Revision-Date: 2020-11-15 12:43+0000\n"
+"Last-Translator: Victor S. <victorstancioiu@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
"Language: es\n"
@@ -65,7 +65,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.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1085,15 +1085,20 @@ msgid "Owners Of:"
msgstr "Propietarios De:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"¿Eliminar los archivos seleccionados del proyecto? (No puede ser restaurado)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Otros recursos necesitan los archivos que estás intentando quitar para "
"funcionar.\n"
@@ -1651,35 +1656,32 @@ msgstr ""
"Enabled'."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"La plataforma de destino requiere compresión de texturas 'ETC' para GLES2. "
-"Activa 'Import Etc' en Ajustes del Proyecto."
+"La plataforma de destino requiere compresión de texturas 'PVRTC' para GLES2. "
+"Activa 'Import Pvrtc' en Ajustes del Proyecto."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"La plataforma de destino requiere compresión de texturas 'ETC2' para GLES3. "
-"Activa 'Import Etc 2' en Ajustes del Proyecto."
+"La plataforma de destino requiere compresión de texturas 'ETC2' o 'PVRTC' "
+"para GLES3. Activa 'Import Etc 2' o 'Import Pvrtc' en Ajustes del Proyecto."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"La plataforma de destino requiere compresión de texturas 'ETC' para usar "
-"GLES2 como controlador de respaldo.\n"
-"Activa 'Import Etc' en Ajustes del Proyecto, o desactiva 'Driver Fallback "
-"Enabled'."
+"La plataforma del objetivo requiere compresión de texturas 'PVRTC' para el "
+"driver fallback de GLES2.\n"
+"Activa Import Pvrtc' en la Ajustes del Proyecto, o desactiva 'Driver "
+"Fallback Enabled'."
#: editor/editor_export.cpp platform/android/export/export.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -2364,19 +2366,25 @@ msgid "Error saving TileSet!"
msgstr "¡Error al guardar el TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "¡Error al guardar el layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Se ha sobreescrito el layout del editor por defecto."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "¡Nombre de layout no encontrado!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Se restauró el layout por defecto a su configuración básica."
#: editor/editor_node.cpp
@@ -3830,6 +3838,11 @@ msgid "Move To..."
msgstr "Mover a..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Mover Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nueva Escena..."
@@ -5297,50 +5310,43 @@ msgstr "Crear Guías Horizontales y Verticales"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Ajusta el Offset del pivote del CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "Rotar CanvasItem"
+msgstr "Rotar %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Rotar CanvasItem"
+msgstr "Rotar CanvasItem \"%s\" a %d grados"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "Mover CanvasItem"
+msgstr "Mover Ancla del CanvasItem \"%s\""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Escalar Node2D \"%s\" a (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Redimensionar Control \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "Escalar CanvasItem"
+msgstr "Escalar %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "Escalar CanvasItem"
+msgstr "Escalar CanvasItem \"%s\" a (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "Mover CanvasItem"
+msgstr "Mover %d CanvasItems"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "Mover CanvasItem"
+msgstr "Mover CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6629,18 +6635,16 @@ msgid "Move Points"
msgstr "Mover Puntos"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Arrastrar: Rotar"
+msgstr "Comando: Rotar"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: Mover todos"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift + Ctrl: Escalar"
+msgstr "Shift+Command: Escalar"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6689,14 +6693,12 @@ msgid "Radius:"
msgstr "Radio:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Crear Polígono y UV"
+msgstr "Copiar Polígono a UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Convertir a Polygon2D"
+msgstr "Copiar UV al Polígono"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8243,13 +8245,12 @@ msgid "Paint Tile"
msgstr "Dibujar Tile"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift + Clic izq: Dibujar línea\n"
-"Shift + Ctrl + Clic izq: Pintar Rectángulo"
+"Shift+Clic izq: Dibujar línea\n"
+"Shift+Command+Clic der: Pintar Rectángulo"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8766,7 +8767,7 @@ msgstr "Redimensionar nodo VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
-msgstr "Establecer Nombre Uniforme"
+msgstr "Establecer Nombre de Uniform"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Input Default Port"
@@ -8777,9 +8778,8 @@ msgid "Add Node to Visual Shader"
msgstr "Añadir Nodo al Visual Shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Nodo Movido"
+msgstr "Nodo(s) Movido(s)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8799,9 +8799,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "Cambiar Tipo de Entrada del Visual Shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Establecer Nombre Uniforme"
+msgstr "Cambio de Nombre de UniformRef"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9522,7 +9521,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "Una referencia a un uniform existente."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -11598,7 +11597,7 @@ msgstr "Eliminar Rotación del Cursor"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Paste Selects"
-msgstr "Pegar Seleccionados"
+msgstr "Pegar Selecciona"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Clear Selection"
@@ -12174,6 +12173,14 @@ msgstr ""
"Configuración del Editor."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12225,18 +12232,36 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"\"Export AAB\" sólo es válido cuando \"Use Custom Build\" está activado."
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"¡Nombre de archivo inválido! Android App Bundle requiere la extensión *.aab."
#: platform/android/export/export.cpp
msgid "APK Expansion not compatible with Android App Bundle."
-msgstr ""
+msgstr "La Expansión APK no es compatible con Android App Bundle."
#: platform/android/export/export.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr ""
+msgstr "¡Nombre de archivo inválido! Android APK requiere la extensión *.apk."
#: platform/android/export/export.cpp
msgid ""
@@ -12275,13 +12300,15 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "Moviendo salida"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"No se puede copiar y renombrar el archivo de exportación, comprueba el "
+"directorio del proyecto de graduación para ver los resultados."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -13062,6 +13089,12 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice."
msgid "Constants cannot be modified."
msgstr "Las constantes no pueden modificarse."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "¡Error al guardar el layout!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Se ha sobreescrito el layout del editor por defecto."
+
#~ msgid "Move pivot"
#~ msgstr "Mover pivote"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index 899e5e8557..c6a8ad8db4 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -1045,15 +1045,20 @@ msgid "Owners Of:"
msgstr "Dueños De:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"¿Eliminar los archivos seleccionados del proyecto? (No puede ser restaurado)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Los archivos que se están removiendo son requeridos por otros recursos para "
"funcionar.\n"
@@ -2326,19 +2331,25 @@ msgid "Error saving TileSet!"
msgstr "Error guardando TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Error al tratar de guardar el layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Se ha sobreescrito el layout del editor por defecto."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nombre de layout no encontrado!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Se restauró el layout por defecto a su configuración básica."
#: editor/editor_node.cpp
@@ -3791,6 +3802,11 @@ msgid "Move To..."
msgstr "Mover A..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Mover Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nueva Escena..."
@@ -12131,6 +12147,14 @@ msgstr ""
"Configuración del Editor."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12184,6 +12208,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13011,6 +13051,12 @@ msgstr "Solo se pueden asignar variaciones en funciones de vértice."
msgid "Constants cannot be modified."
msgstr "Las constantes no pueden modificarse."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Error al tratar de guardar el layout!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Se ha sobreescrito el layout del editor por defecto."
+
#~ msgid "Move pivot"
#~ msgstr "Mover pivote"
diff --git a/editor/translations/et.po b/editor/translations/et.po
index 0059926322..9cdb0999bc 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -1009,14 +1009,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2274,11 +2277,16 @@ msgid "Error saving TileSet!"
msgstr "Viga TileSeti salvestamisel!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Viga paigutuse salvestamisel!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2286,7 +2294,8 @@ msgid "Layout name not found!"
msgstr "Paigutuse nime ei leitud!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Taastati vaikepaigutus baasseadetesse."
#: editor/editor_node.cpp
@@ -3633,6 +3642,10 @@ msgid "Move To..."
msgstr "Teisalda..."
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Uus stseen..."
@@ -11613,6 +11626,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11657,6 +11678,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12327,5 +12364,8 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstante ei saa muuta."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Viga paigutuse salvestamisel!"
+
#~ msgid "Not in resource path."
#~ msgstr "Ei ole ressursiteel."
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index 7e4389b87b..c203c37d43 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -1000,15 +1000,20 @@ msgid "Owners Of:"
msgstr "Hauen jabeak:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Kendu hautatutako fitxategiak proiektutik? (Ezin izango da berreskuratu)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Kendu beharreko fitxategiak beste baliabide batzuek behar dituzte funtziona "
"dezaten.\n"
@@ -2239,11 +2244,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2251,7 +2261,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3593,6 +3603,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11582,6 +11596,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11626,6 +11648,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index 1ed888fded..b20b7732fb 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -17,12 +17,14 @@
# Farshad Faemiyi <ffaemiyi@gmail.com>, 2020.
# Pikhosh <pikhosh@gmail.com>, 2020.
# MSKF <walkingdeadstudio@outlook.com>, 2020.
+# Ahmad Maftoun <CarCedo.Pro@gmail.com>, 2020.
+# ItzMiad44909858f5774b6d <maidggg@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-19 21:08+0000\n"
-"Last-Translator: Pikhosh <pikhosh@gmail.com>\n"
+"PO-Revision-Date: 2020-11-08 10:26+0000\n"
+"Last-Translator: MSKF <walkingdeadstudio@outlook.com>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/"
"godot/fa/>\n"
"Language: fa\n"
@@ -30,7 +32,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.3.1-dev\n"
+"X-Generator: Weblate 4.3.2\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -443,7 +445,7 @@ msgstr "مسیر قطعه نامعتبر، پس نمی‌توان یک کلید
#: editor/animation_track_editor.cpp
msgid "Track is not of type Spatial, can't insert key"
-msgstr ""
+msgstr "آهنگ از نوع مکانی نیست ، نمی تواند کلید را وارد کند"
#: editor/animation_track_editor.cpp
msgid "Add Transform Track Key"
@@ -670,11 +672,11 @@ msgstr "اÙزودن کلیپ آهنگ صوتی"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip Start Offset"
-msgstr ""
+msgstr "تغییر اÙکت شروع کلیپ آهنگ صوتی"
#: editor/animation_track_editor_plugins.cpp
msgid "Change Audio Track Clip End Offset"
-msgstr ""
+msgstr "تغییر اÙست انتهای کلیپ آهنگ صوتی"
#: editor/array_property_edit.cpp
msgid "Resize Array"
@@ -735,7 +737,7 @@ msgstr "استاندارد"
#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp
msgid "Toggle Scripts Panel"
-msgstr ""
+msgstr "تغییر پانل اسکریپت ها"
#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/texture_region_editor_plugin.cpp
@@ -790,7 +792,7 @@ msgstr "از سیگنال:"
#: editor/connections_dialog.cpp
msgid "Scene does not contain any script."
-msgstr ""
+msgstr "صحنه شامل هیچ Ùیلم نامه ای نیست."
#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
@@ -833,6 +835,8 @@ msgstr "به تعویق اÙتاده"
msgid ""
"Defers the signal, storing it in a queue and only firing it at idle time."
msgstr ""
+"سیگنال را تعویض Ù…ÛŒ کند ØŒ آن را در یک ص٠ذخیره Ù…ÛŒ کند Ùˆ Ùقط در زمان بیکاری "
+"شلیک می کند."
#: editor/connections_dialog.cpp
msgid "Oneshot"
@@ -840,7 +844,7 @@ msgstr "تک نما"
#: editor/connections_dialog.cpp
msgid "Disconnects the signal after its first emission."
-msgstr ""
+msgstr "سیگنال را پس از اولین انتشار آن قطع می کند."
#: editor/connections_dialog.cpp
msgid "Cannot connect signal"
@@ -907,13 +911,12 @@ msgid "Signals"
msgstr "سیگنال‌ها"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Filter signals"
-msgstr "صاÙÛŒ کردن گره‌ها"
+msgstr "صاÙÛŒ کردن گره‌هاسیگنال ها را Ùیلتر کنید"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from this signal?"
-msgstr ""
+msgstr "آیا مطمئن هستید که می خواهید همه اتصالات را از این سیگنال حذ٠کنید؟"
#: editor/connections_dialog.cpp
msgid "Disconnect All"
@@ -1037,14 +1040,19 @@ msgid "Owners Of:"
msgstr "مالکانÙ:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "آیا پرونده‌های انتخاب شده از طرح حذ٠شوند؟ (نمی‌توان بازیابی کرد)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"پرونده‌هایی که می‌خواهید حذ٠شوند برای منابع دیگر مورد نیاز هستند تا کار "
"کنند.\n"
@@ -1154,14 +1162,12 @@ msgid "Gold Sponsors"
msgstr "حامیان طلایی (درجه ۲)"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Silver Sponsors"
-msgstr "اهداکنندگان نقره‌ای"
+msgstr "حامیان نقره ای"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Sponsors"
-msgstr "اهداکنندگان برنزی"
+msgstr "اهداکنندگان برنزیحامیان مالی"
#: editor/editor_about.cpp
msgid "Mini Sponsors"
@@ -1316,7 +1322,6 @@ msgid "Bypass"
msgstr "‌گذرگاه Ùرعی"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus options"
msgstr "گزینه های اتوبوس"
@@ -1364,27 +1369,27 @@ msgstr "انتقال صدای خطی"
#: editor/editor_audio_buses.cpp
msgid "Save Audio Bus Layout As..."
-msgstr ""
+msgstr "ذخیره طرح اتوبوس صوتی به عنوان ..."
#: editor/editor_audio_buses.cpp
msgid "Location for New Layout..."
-msgstr ""
+msgstr "مکان برای طرح جدید ..."
#: editor/editor_audio_buses.cpp
msgid "Open Audio Bus Layout"
-msgstr ""
+msgstr "چیدمان اتوبوس صوتی را باز کنید"
#: editor/editor_audio_buses.cpp
msgid "There is no '%s' file."
-msgstr ""
+msgstr "پرونده '٪ s' وجود ندارد."
#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp
msgid "Layout"
-msgstr ""
+msgstr "چیدمان"
#: editor/editor_audio_buses.cpp
msgid "Invalid file, not an audio bus layout."
-msgstr ""
+msgstr "پرونده نامعتبر است ، نه طرح اتوبوس صوتی."
#: editor/editor_audio_buses.cpp
msgid "Error saving file: %s"
@@ -1392,11 +1397,11 @@ msgstr "خطای ذخیره کردن پرونده: %s"
#: editor/editor_audio_buses.cpp
msgid "Add Bus"
-msgstr ""
+msgstr "اتوبوس اضاÙÙ‡ کنید"
#: editor/editor_audio_buses.cpp
msgid "Add a new Audio Bus to this layout."
-msgstr ""
+msgstr "یک Audio Bus جدید به این طرح اضاÙÙ‡ کنید."
#: editor/editor_audio_buses.cpp editor/editor_properties.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp
@@ -1406,7 +1411,7 @@ msgstr "بارگیری"
#: editor/editor_audio_buses.cpp
msgid "Load an existing Bus Layout."
-msgstr ""
+msgstr "چیدمان اتوبوس موجود را بارگیری کنید."
#: editor/editor_audio_buses.cpp
msgid "Save As"
@@ -1414,7 +1419,7 @@ msgstr "ذخیره در"
#: editor/editor_audio_buses.cpp
msgid "Save this Bus Layout to a file."
-msgstr ""
+msgstr "این طرح Bus را در یک پرونده ذخیره کنید."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
@@ -1422,11 +1427,11 @@ msgstr "بارگیری پیش Ùرض"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
-msgstr ""
+msgstr "طرح پیش Ùرض اتوبوس را بارگیری کنید."
#: editor/editor_audio_buses.cpp
msgid "Create a new Bus Layout."
-msgstr ""
+msgstr "طرح جدید اتوبوس ایجاد کنید."
#: editor/editor_autoload_settings.cpp
msgid "Invalid name."
@@ -1467,23 +1472,23 @@ msgstr "تغییر حالت اتماتیک لود عمومی"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr ""
+msgstr "بارگیری خودکار را انجام دهید"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr ""
+msgstr "بارگیری خودکار را حذ٠کنید"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
-msgstr ""
+msgstr "روشن"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr ""
+msgstr "تنظیم مجدد بارهای خودکار"
#: editor/editor_autoload_settings.cpp
msgid "Can't add autoload:"
-msgstr ""
+msgstr "اضاÙÙ‡ کردن خودکار امکان پذیر نیست:"
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1512,19 +1517,19 @@ msgstr "سینگلتون"
#: editor/editor_data.cpp editor/inspector_dock.cpp
msgid "Paste Params"
-msgstr ""
+msgstr "چسباندن پارام ها"
#: editor/editor_data.cpp
msgid "Updating Scene"
-msgstr ""
+msgstr "صحنه به روز می شود"
#: editor/editor_data.cpp
msgid "Storing local changes..."
-msgstr ""
+msgstr "ذخیره تغییرات محلی ..."
#: editor/editor_data.cpp
msgid "Updating scene..."
-msgstr ""
+msgstr "صحنه به روز می شود ..."
#: editor/editor_data.cpp editor/editor_properties.cpp
msgid "[empty]"
@@ -1532,15 +1537,15 @@ msgstr "[پوچ]"
#: editor/editor_data.cpp
msgid "[unsaved]"
-msgstr ""
+msgstr "[ذخیره نشده]"
#: editor/editor_dir_dialog.cpp
msgid "Please select a base directory first."
-msgstr ""
+msgstr "لطÙاً ابتدا دایرکتوری پایه را انتخاب کنید."
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
-msgstr ""
+msgstr "یک Ùهرست انتخاب کنید"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp editor/project_manager.cpp
@@ -1562,7 +1567,7 @@ msgstr "ناتوان در ساختن پوشه."
#: editor/editor_dir_dialog.cpp
msgid "Choose"
-msgstr ""
+msgstr "انتخاب کنید"
#: editor/editor_export.cpp
msgid "Storing File:"
@@ -2281,11 +2286,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2293,7 +2303,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3683,6 +3693,11 @@ msgstr ""
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "بارگیری خودکار را انجام دهید"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "صحنه جدید"
@@ -8337,9 +8352,8 @@ msgid "Occlusion"
msgstr "ویرایش سیگنال"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Navigation"
-msgstr "گره انیمیشن"
+msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Bitmask"
@@ -8928,9 +8942,8 @@ msgid "SoftLight operator."
msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Color constant."
-msgstr "ثابت"
+msgstr "مقدار ثابت رنگ"
#: editor/plugins/visual_shader_editor_plugin.cpp
#, fuzzy
@@ -8943,15 +8956,15 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Equal (==)"
-msgstr ""
+msgstr "مساوی (==)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than (>)"
-msgstr ""
+msgstr "بزرگتر از (<)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than or Equal (>=)"
-msgstr ""
+msgstr "بزرگتر یا برابر (=<)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -8973,15 +8986,15 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than (<)"
-msgstr ""
+msgstr "کمتر از (>)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than or Equal (<=)"
-msgstr ""
+msgstr "کمتر یا مساوی (=>)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Not Equal (!=)"
-msgstr ""
+msgstr "نا مساوی (=!)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9017,7 +9030,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Input parameter."
-msgstr ""
+msgstr "پارامتر ورودی."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex and fragment shader modes."
@@ -9668,7 +9681,7 @@ msgstr ""
#: editor/project_export.cpp
msgid "Features"
-msgstr ""
+msgstr "ویژگی‌ها"
#: editor/project_export.cpp
msgid "Custom (comma-separated):"
@@ -10383,7 +10396,7 @@ msgstr "AutoLoad"
#: editor/project_settings_editor.cpp
msgid "Plugins"
-msgstr "پلاگین ها"
+msgstr "اÙزونه‌ها"
#: editor/property_editor.cpp
msgid "Preset..."
@@ -12087,11 +12100,11 @@ msgstr "شیء پایه یک گره نیست!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr "مسیر به یک گره نمیرسد!"
+msgstr "مسیر به یک نود نمیرسد!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr "نام دارایی ایندکس نامعتبر 's%' در گره s%."
+msgstr "نام دارایی ایندکس نامعتبر 's%' در نود s%."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
@@ -12129,11 +12142,11 @@ msgstr "حذ٠گره اسکریپت٠دیداری"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Get %s"
-msgstr ""
+msgstr "گرÙتن %s"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Set %s"
-msgstr ""
+msgstr "تنظیم %s"
#: platform/android/export/export.cpp
msgid "Package name is missing."
@@ -12188,6 +12201,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12233,6 +12254,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12873,7 +12910,7 @@ msgstr ""
#: scene/gui/color_picker.cpp
msgid "Pick a color from the editor window."
-msgstr ""
+msgstr "یک رنگ از پنجره ویرایشگر بردارید"
#: scene/gui/color_picker.cpp
msgid "HSV"
@@ -12925,7 +12962,7 @@ msgstr ""
#: scene/gui/range.cpp
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
-msgstr ""
+msgstr "اگر \"Exp ویرایش\" Ùعال است, \"حداقل داده\" باید بزرگتر از 0 باشد."
#: scene/gui/scroll_container.cpp
msgid ""
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index 6531c986c9..8dca6b5cb1 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-03 15:29+0000\n"
+"PO-Revision-Date: 2020-10-30 10:21+0000\n"
"Last-Translator: Tapani Niemi <tapani.niemi@kapsi.fi>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/godot-engine/"
"godot/fi/>\n"
@@ -24,7 +24,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.3-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1029,14 +1029,19 @@ msgid "Owners Of:"
msgstr "Omistajat kohteelle:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Poista valitut tiedostot projektista? (Ei voida palauttaa)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Poistettavaksi merkittyjä tiedostoja tarvitaan muiden resurssien "
"toimivuuteen.\n"
@@ -1595,34 +1600,31 @@ msgstr ""
"Enabled' asetus."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"GLES2 tarvitsee kohdealustalla 'ETC' tekstuuripakkausta. Kytke 'Import Etc' "
-"päälle projektin asetuksista."
+"GLES2 tarvitsee kohdealustalla 'PVRTC' tekstuuripakkausta. Kytke 'Import "
+"Pvrtc' päälle projektin asetuksista."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"GLES3 tarvitsee kohdealustalla 'ETC' tekstuuripakkausta. Kytke 'Import Etc "
-"2' päälle projektin asetuksista."
+"GLES3 tarvitsee kohdealustalla 'ETC2' tai 'PVRTC' tekstuuripakkausta. Kytke "
+"'Import Etc 2' tai 'Import Pvrtc' päälle projektin asetuksista."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"GLES2 vara-ajuri tarvitsee kohdealustalla 'ETC' tekstuuripakkausta.\n"
-"Kytke 'Import Etc' päälle projektin asetuksista tai poista 'Driver Fallback "
-"Enabled' asetus."
+"GLES2 vara-ajuri tarvitsee kohdealustalla 'PVRTC' tekstuuripakkausta.\n"
+"Kytke 'Import Pvrtc' päälle projektin asetuksista tai poista 'Driver "
+"Fallback Enabled' asetus."
#: editor/editor_export.cpp platform/android/export/export.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -2305,19 +2307,25 @@ msgid "Error saving TileSet!"
msgstr "Virhe tallennettaessa laattavalikoimaa!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Virhe tallennettaessa asettelua!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Editorin oletusasettelu ylikirjoitettu."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Asettelun nimeä ei löytynyt!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Palautettiin oletusasettelu alkuperäisiin asetuksiinsa."
#: editor/editor_node.cpp
@@ -3746,6 +3754,11 @@ msgid "Move To..."
msgstr "Siirrä..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Siirrä automaattisesti ladattavaa"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Uusi skene..."
@@ -5211,50 +5224,43 @@ msgstr "Luo vaaka- ja pystysuorat apuviivat"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Aseta CanvasItem \"%s\" keskiöksi (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "Kierrä CanvasItemiä"
+msgstr "Kierrä %d CanvasItemiä"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Kierrä CanvasItemiä"
+msgstr "Kierrä CanvasItem \"%s\":ä %d astetta"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "Siirrä CanvasItemiä"
+msgstr "Siirrä CanvasItem \"%s\":n ankkuri"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Skaalaa Node2D \"%s\" kokoon (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Muuta Control \"%s\" kokoon (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "Skaalaa CanvasItemiä"
+msgstr "Skaalaa %d CanvasItemiä"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "Skaalaa CanvasItemiä"
+msgstr "Skaalaa CanvasItem \"%s\" kokoon (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "Siirrä CanvasItemiä"
+msgstr "Siirrä %d CanvasItemiä"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "Siirrä CanvasItemiä"
+msgstr "Siirrä CanvasItem \"%s\" koordinaattiin (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6535,18 +6541,16 @@ msgid "Move Points"
msgstr "Siirrä pisteitä"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Vedä: Kierrä"
+msgstr "Komentonäppäin: Kierrä"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: Siirrä kaikkia"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl: Skaalaa"
+msgstr "Shift+komentonäppäin: Skaalaa"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6594,14 +6598,12 @@ msgid "Radius:"
msgstr "Säde:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Luo polygoni ja UV"
+msgstr "Kopioi polygoni UV:hen"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Muunna Polygon2D solmuksi"
+msgstr "Kopioi UV Polygon solmulle"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8149,13 +8151,12 @@ msgid "Paint Tile"
msgstr "Maalaa laatta"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift+Hiiren vasen: Piirrä viiva\n"
-"Shift+Ctrl+Hiiren vasen: Suorakaidemaalaus"
+"Shift+Hiiren vasen: Viivanpiirto\n"
+"Shift+Komentonäppäin+Hiiren vasen: Suorakaidemaalaus"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8683,9 +8684,8 @@ msgid "Add Node to Visual Shader"
msgstr "Lisää solmu Visual Shaderiin"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Solmu siirretty"
+msgstr "Solmu(t) siirretty"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8705,9 +8705,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "Visual Shaderin syötteen tyyppi vaihdettu"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Aseta uniformin nimi"
+msgstr "UniformRef nimi muutettu"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9420,7 +9419,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "Viittaus olemassa olevaan uniformiin."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -12060,6 +12059,14 @@ msgstr ""
"asetuksissa."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12114,18 +12121,39 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"\"Export AAB\" on käyttökelpoinen vain, kun \"Use Custom Build\" asetus on "
+"päällä."
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"Virheellinen tiedostonimi! Android App Bundle tarvitsee *.aab "
+"tiedostopäätteen."
#: platform/android/export/export.cpp
msgid "APK Expansion not compatible with Android App Bundle."
-msgstr ""
+msgstr "APK Expansion ei ole yhteensopiva Android App Bundlen kanssa."
#: platform/android/export/export.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
+"Virheellinen tiedostonimi! Android APK tarvitsee *.apk tiedostopäätteen."
#: platform/android/export/export.cpp
msgid ""
@@ -12162,13 +12190,15 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "Siirretään tulostetta"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Vientitiedoston kopiointi ja uudelleennimeäminen ei onnistu, tarkista "
+"tulosteet gradle-projektin hakemistosta."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -12927,6 +12957,12 @@ msgstr "Varying tyypin voi sijoittaa vain vertex-funktiossa."
msgid "Constants cannot be modified."
msgstr "Vakioita ei voi muokata."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Virhe tallennettaessa asettelua!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Editorin oletusasettelu ylikirjoitettu."
+
#~ msgid "Move pivot"
#~ msgstr "Siirrä keskikohtaa"
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index 2db2e9676c..6377bee04a 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -1009,14 +1009,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2242,11 +2245,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2254,7 +2262,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3595,6 +3603,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11585,6 +11597,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11629,6 +11649,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 75d4c1cfea..c898ea3c96 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -75,12 +75,13 @@
# Julien Humbert <julroy67@gmail.com>, 2020.
# Nathan <bonnemainsnathan@gmail.com>, 2020.
# Léo Vincent <l009.vincent@gmail.com>, 2020.
+# Joseph Boudou <joseph.boudou@matabio.net>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-28 11:18+0000\n"
-"Last-Translator: Nathan <bonnemainsnathan@gmail.com>\n"
+"PO-Revision-Date: 2020-11-15 12:43+0000\n"
+"Last-Translator: Joseph Boudou <joseph.boudou@matabio.net>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
"Language: fr\n"
@@ -88,7 +89,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.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1107,15 +1108,20 @@ msgid "Owners Of:"
msgstr "Propriétaires de :"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Supprimer les fichiers sélectionnés du projet ? (restauration impossible)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Les fichiers qui vont être supprimés sont utilisés par d'autres ressources "
"pour leur fonctionnement.\n"
@@ -1674,34 +1680,31 @@ msgstr ""
"Fallback Enabled'."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"La plate-forme cible nécessite une compression de texture 'ETC' pour GLES2. "
-"Activez 'Import Etc' dans les paramètres du projet."
+"La plate-forme cible nécessite une compression de texture « ETC » pour "
+"GLES2. Activez « Import Etc » dans les paramètres du projet."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"La plate-forme cible nécessite une compression de texture 'ETC2' pour GLES3. "
-"Activez 'Import Etc 2' dans les Paramètres du projet."
+"La plate-forme cible nécessite une compression de texture « ETC2 » pour "
+"GLES3. Activez « Import Etc 2 » dans les Paramètres du projet."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"La plate-forme cible nécessite une compression de texture ' ETC ' pour le "
+"La plate-forme cible nécessite une compression de texture ' PVRTC ' pour le "
"fallback pilote de GLES2.\n"
-"Activez 'Import Etc' dans les paramètres du projet, ou désactivez 'Driver "
+"Activez 'Import Pvrtc' dans les paramètres du projet, ou désactivez 'Driver "
"Fallback Enabled'."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -2384,19 +2387,25 @@ msgid "Error saving TileSet!"
msgstr "Erreur d'enregistrement du TileSet !"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Erreur d'enregistrement de la disposition !"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Disposition de l'éditeur par défaut remplacée."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nom de la disposition non trouvé !"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Disposition par défaut remise à zéro."
#: editor/editor_node.cpp
@@ -3856,6 +3865,11 @@ msgid "Move To..."
msgstr "Déplacer vers…"
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Déplacer l'AutoLoad"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nouvelle scène..."
@@ -5327,8 +5341,9 @@ msgid "Create Horizontal and Vertical Guides"
msgstr "Créer de nouveaux guides horizontaux et verticaux"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Décalage pivot du CanvasItem « %s » défini à (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -5336,22 +5351,23 @@ msgid "Rotate %d CanvasItems"
msgstr "Pivoter l'élément de canevas"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Pivoter l'élément de canevas"
+msgstr "Pivoter le CanvasItem \"%s\" de %d degrés"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "Déplacer l'élément de canevas"
+msgstr "Déplacer l'ancre \"%s\" du CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Mettre à l'échelle Node2D \"%s\" vers (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Redimensionner le Contrôle \"%s\" vers (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6667,18 +6683,16 @@ msgid "Move Points"
msgstr "Déplacer de points"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Glisser : tourner"
+msgstr "Commande : Rotation"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Maj : Tout déplacer"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Maj+Contrôle : Mettre à l'échelle"
+msgstr "Shift + Commande : Mettre à l'échelle"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6728,12 +6742,12 @@ msgstr "Rayon :"
#: editor/plugins/polygon_2d_editor_plugin.cpp
#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Créer un polygone & UV"
+msgstr "Copier le polygone dans UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Convertir en Polygon2D"
+msgstr "Copier UV dans le polygone"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8290,8 +8304,8 @@ msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift + Clic gauche : Dessiner une ligne\n"
-"Shift + Ctrl + Clic gauche : Dessiner un rectangle"
+"Shift+LMB : Dessiner une ligne\n"
+"Shift+Commande+LMB : Dessiner un rectangle"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8821,9 +8835,8 @@ msgid "Add Node to Visual Shader"
msgstr "Ajouter un nœud au Visual Shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Nœud déplacé"
+msgstr "Nœud(s) déplacé(s)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8845,7 +8858,7 @@ msgstr "Type d’entrée Visual Shader changée"
#: editor/plugins/visual_shader_editor_plugin.cpp
#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Définir le nom de l'uniforme"
+msgstr "Nom UniformRef modifié"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9566,8 +9579,9 @@ msgstr ""
"constantes."
#: editor/plugins/visual_shader_editor_plugin.cpp
+#, fuzzy
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "Une référence à un uniform existant."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -12227,6 +12241,14 @@ msgstr ""
"paramètres de l'éditeur."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12277,20 +12299,45 @@ msgstr ""
"Xr » est « Oculus Mobile VR »."
#: platform/android/export/export.cpp
+#, fuzzy
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"« Exportation AAB » est valide uniquement lorsque l'option « Utiliser une "
+"build personnalisée » est activée."
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"Nom de fichier invalide ! Le bundle d'application Android nécessite "
+"l'extension *.aab."
#: platform/android/export/export.cpp
msgid "APK Expansion not compatible with Android App Bundle."
msgstr ""
+"L'expansion de fichier APK n'est pas compatible avec le bundle d'application "
+"Android."
#: platform/android/export/export.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
+"Nom de fichier invalide ! Les fichiers APK d'Android nécessitent l'extension "
+"*.apk."
#: platform/android/export/export.cpp
msgid ""
@@ -12328,14 +12375,17 @@ msgstr ""
"Android."
#: platform/android/export/export.cpp
+#, fuzzy
msgid "Moving output"
-msgstr ""
+msgstr "Sortie de déplacement"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Impossible de copier et de renommer le fichier d'export, vérifiez le dossier "
+"du projet gradle pour les journaux."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -13121,6 +13171,12 @@ msgstr "Les variations ne peuvent être affectées que dans la fonction vertex."
msgid "Constants cannot be modified."
msgstr "Les constantes ne peuvent être modifiées."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Erreur d'enregistrement de la disposition !"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Disposition de l'éditeur par défaut remplacée."
+
#~ msgid "Move pivot"
#~ msgstr "Déplacer le pivot"
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index 17b0134def..d7f5165300 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -1002,14 +1002,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2236,11 +2239,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2248,7 +2256,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3588,6 +3596,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11582,6 +11594,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11626,6 +11646,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/he.po b/editor/translations/he.po
index 1a4c5ee05d..66fc99c39d 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -17,12 +17,13 @@
# Ziv D <wizdavid@gmail.com>, 2020.
# yariv benj <yariv4400@gmail.com>, 2020.
# Guy Dadon <guydadon14@gmail.com>, 2020.
+# bruvzg <bruvzg13@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-27 18:26+0000\n"
-"Last-Translator: Guy Dadon <guydadon14@gmail.com>\n"
+"PO-Revision-Date: 2020-11-17 11:07+0000\n"
+"Last-Translator: Ziv D <wizdavid@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/godot-engine/"
"godot/he/>\n"
"Language: he\n"
@@ -31,7 +32,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
-"X-Generator: Weblate 4.3.2-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -50,7 +51,7 @@ msgstr "×ין מספיק ×‘×ª×™× ×œ×¤×¢× ×•×— בתי×, ×ו פורמט ×œ× ×
#: core/math/expression.cpp
msgid "Invalid input %i (not passed) in expression"
-msgstr "קלט שגוי %I (×œ× ×”×•×¢×‘×¨) בתוך הביטוי"
+msgstr "קלט שגוי %i (×œ× ×”×•×¢×‘×¨) בתוך הביטוי"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -58,7 +59,7 @@ msgstr "'self' ×œ× × ×™×ª×Ÿ לשימוש ×›×™ המופע הינו 'null' ( ל×
#: 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"
@@ -70,7 +71,7 @@ msgstr "×©× ×ינדקס ×œ× ×ª×§×™×Ÿ '%s' לסוג בסיס %s"
#: core/math/expression.cpp
msgid "Invalid arguments to construct '%s'"
-msgstr "×¤×¨×ž×˜×¨×™× ×©×’×•×™×™× ×œ×‘× ×™×™×ª 's%'"
+msgstr "×¤×¨×ž×˜×¨×™× ×©×’×•×™×™× ×œ×‘× ×™×™×ª '%s'"
#: core/math/expression.cpp
msgid "On call to '%s':"
@@ -1040,14 +1041,17 @@ msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "להסיר ×ת ×”×§×‘×¦×™× ×”× ×‘×—×¨×™× ×ž×”×ž×™×–×? (××™ ×פשר לשחזר)"
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -1740,7 +1744,7 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "Error saving profile to path: '%s'."
-msgstr "שגי××” בשמירת פרופיל לנתיב 's%'."
+msgstr "שגי××” בשמירת פרופיל לנתיב '%s'."
#: editor/editor_feature_profile.cpp
msgid "Unset"
@@ -2046,8 +2050,8 @@ msgid ""
"There is currently no description for this property. Please help us by "
"[color=$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"כרגע ×ין תי×ור למ×פיין ×–×”. בבקשה עזור לנו על-ידי [/color][/url]כתיבת "
-"תי×ור[url=$url][color=$color]!"
+"כרגע ×ין תי×ור למ×פיין ×–×”. בבקשה עזור לנו על-ידי [color=$color][url="
+"$url]כתיבת תי×ור[/url][/color]!"
#: editor/editor_help.cpp
msgid "Method Descriptions"
@@ -2058,8 +2062,8 @@ msgid ""
"There is currently no description for this method. Please help us by [color="
"$color][url=$url]contributing one[/url][/color]!"
msgstr ""
-"כרגע ×ין תי×ור למתודה זו. בבקשה עזור לנו על-ידי [/url][/color]כתיבת תי×ור "
-"[color=$color][url=$url]!"
+"כרגע ×ין תי×ור למתודה זו. בבקשה עזור לנו על-ידי [color=$color][url="
+"$url]כתיבת תי×ור [/url][/color]!"
#: editor/editor_help_search.cpp editor/editor_node.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -2248,11 +2252,11 @@ msgstr "שגי××” בעת השמירה."
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Can't open '%s'. The file could have been moved or deleted."
-msgstr "×œ× ×™×›×•×œ לפתוח ×ת 's%'. יכול להיות שהקובץ הועבר ×ו נמחק."
+msgstr "×œ× ×™×›×•×œ לפתוח ×ת '%s'. יכול להיות שהקובץ הועבר ×ו נמחק."
#: editor/editor_node.cpp
msgid "Error while parsing '%s'."
-msgstr "שגי××” בפענוח 's%'."
+msgstr "שגי××” בפענוח '%s'."
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
@@ -2260,11 +2264,11 @@ msgstr "סוף קובץ בלתי צפוי '%s'."
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr "חסר 's%' ×ו תלות שלו."
+msgstr "חסר '%s' ×ו תלות שלו."
#: editor/editor_node.cpp
msgid "Error while loading '%s'."
-msgstr "שגי××” בטעינת 's%'."
+msgstr "שגי××” בטעינת '%s'."
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -2317,19 +2321,25 @@ msgid "Error saving TileSet!"
msgstr "שגי××” בשמירת TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "שמירת הפריסה נכשלה!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "ברירת המחדל של עורך הפריסה נדרסה."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "×©× ×”×¤×¨×™×¡×” ×œ× × ×ž×¦×!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "פריסת ברירת המחדל שוחזרה להגדרות הבסיס."
#: editor/editor_node.cpp
@@ -3049,7 +3059,7 @@ msgstr "מערכת קבצי×"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr "חוקר"
+msgstr "מפקח"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
@@ -3738,6 +3748,11 @@ msgstr "העברה ×ל…"
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "הזזת טעינה ×וטומטית"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "סצנה חדשה"
@@ -4592,180 +4607,171 @@ msgstr "ניגון ההנפשה שנבחרה ×ž×”×ž×™×§×•× ×”× ×•×›×—×™. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr ""
+msgstr "×ž×™×§×•× ×”× ×¤×©×” (בשניות)."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr ""
+msgstr "שינוי קנה מידה לניגון הנפשה ב×ופן גלובלי עבור המפרק."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr ""
+msgstr "כלי הנפשה"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation"
-msgstr ""
+msgstr "הנפשה"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Edit Transitions..."
-msgstr "מעברוני×"
+msgstr "עריכת מעברי×..."
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Open in Inspector"
-msgstr "חוקר"
+msgstr "פתיחה במפקח"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr ""
+msgstr "הצגת רשימת הנפשות בנגן."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr ""
+msgstr "הפעלה ×וטומטית בטעינה"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Enable Onion Skinning"
-msgstr ""
+msgstr "הפעלת שכבות בצל"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Onion Skinning Options"
-msgstr "הגדרות הצמדה"
+msgstr "הגדרות שכבות בצל"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Directions"
-msgstr ""
+msgstr "כיווני×"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Past"
-msgstr ""
+msgstr "עבר"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Future"
-msgstr ""
+msgstr "עתיד"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Depth"
-msgstr ""
+msgstr "עומק"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "1 step"
-msgstr ""
+msgstr "צעד 1"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "2 steps"
-msgstr ""
+msgstr "2 צעדי×"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "3 steps"
-msgstr ""
+msgstr "3 צעדי×"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Differences Only"
-msgstr ""
+msgstr "רק הבדלי×"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Force White Modulate"
-msgstr ""
+msgstr "×ילוץ ציור לבן"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Include Gizmos (3D)"
-msgstr ""
+msgstr "הכללת גיזמו (3D)"
#: editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Pin AnimationPlayer"
-msgstr "×©× ×”× ×¤×©×” חדשה:"
+msgstr "הצמדת AnimationPlayer"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
-msgstr ""
+msgstr "יצירת הנפשה חדשה"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
-msgstr ""
+msgstr "×©× ×”× ×¤×©×”:"
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/resource_preloader_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
msgid "Error!"
-msgstr ""
+msgstr "שגי××”!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr ""
+msgstr "זמני מיזוג:"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr ""
+msgstr "×”×‘× (תור ×וטומטי):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr ""
+msgstr "זמני מיזוג בין הנפשות"
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Move Node"
-msgstr "מצב הזזה (W)"
+msgstr "הזזת מפרק"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition exists!"
msgstr "המעברון קיי×!"
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Add Transition"
-msgstr "מעברון"
+msgstr "הוספת מעברון"
#: editor/plugins/animation_state_machine_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
-msgstr ""
+msgstr "הוספת מפרק"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "End"
-msgstr ""
+msgstr "סוף"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Immediate"
-msgstr ""
+msgstr "מיידי"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Sync"
-msgstr ""
+msgstr "סנכרון"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "At End"
-msgstr ""
+msgstr "בסוף"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Travel"
-msgstr ""
+msgstr "טיול"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Start and end nodes are needed for a sub-transition."
-msgstr ""
+msgstr "יש צורך במפרקי התחלה וסוף למעברון משנה."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "No playback resource set at path: %s."
-msgstr "×œ× ×‘× ×ª×™×‘ המש×ב."
+msgstr "×œ× × ×§×‘×¢ מש×ב לניגון בנתיב: %s."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Node Removed"
-msgstr "הסרה"
+msgstr "הוסר מפרק"
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Transition Removed"
-msgstr "מעברון"
+msgstr "הוסר מעברון"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set Start Node (Autoplay)"
-msgstr ""
+msgstr "קביעת מפרק התחלה (ניגון ×וטומטי)"
#: editor/plugins/animation_state_machine_editor.cpp
msgid ""
@@ -4773,199 +4779,200 @@ msgid ""
"RMB to add new nodes.\n"
"Shift+LMB to create connections."
msgstr ""
+"בחירת והזזת מפרקי×.\n"
+"RMB להוספת ×ž×¤×¨×§×™× ×—×“×©×™×.\n"
+"Shift + LMB ליצירת חיבורי×."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Create new nodes."
-msgstr "יצירת %s חדש"
+msgstr "יצירת ×ž×¤×¨×§×™× ×—×“×©×™×."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Connect nodes."
-msgstr "התחברות למפרק:"
+msgstr "חיבור מפרקי×."
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Remove selected node or transition."
-msgstr "להסיר ×ת ×”×§×‘×¦×™× ×”× ×‘×—×¨×™× ×ž×”×ž×™×–×? (××™ ×פשר לשחזר)"
+msgstr "הסרת מפרק ×ו מעברון שנבחרו."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Toggle autoplay this animation on start, restart or seek to zero."
-msgstr ""
+msgstr "הפעלה/ביטול ניגון ×וטומטי של הנפשה זו בהפעלה, הפעלה מחדש ×ו מעבר ל×פס."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set the end animation. This is useful for sub-transitions."
-msgstr ""
+msgstr "קביעת הנפשת הסיו×. ×–×” שימושי למעברי משנה."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition: "
msgstr "מעברון: "
#: editor/plugins/animation_state_machine_editor.cpp
-#, fuzzy
msgid "Play Mode:"
-msgstr "מצב גולמי"
+msgstr "מצב ניגון:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "AnimationTree"
-msgstr ""
+msgstr "עץ הנפשה"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "New name:"
-msgstr ""
+msgstr "×©× ×—×“×©:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Scale:"
-msgstr ""
+msgstr "קנה מידה:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#, fuzzy
msgid "Fade In (s):"
-msgstr ""
+msgstr "דהייה/יות:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#, fuzzy
msgid "Fade Out (s):"
-msgstr ""
+msgstr "עמעו×/×™×:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "מיזוג"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Mix"
-msgstr ""
+msgstr "עירבוב"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr ""
+msgstr "התחלה מחדש ×וטומטית:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Restart (s):"
-msgstr ""
+msgstr "התחלה(ות) מחדש:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr ""
+msgstr "התחלה(ות) מחדש ב×קר××™:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Start!"
-msgstr ""
+msgstr "התחלה!"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Amount:"
-msgstr ""
+msgstr "כמות:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend 0:"
-msgstr ""
+msgstr "מיזוג 0:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend 1:"
-msgstr ""
+msgstr "מיזוג 1:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr ""
+msgstr "זמן עמעו×/×™× (X-Fade):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Current:"
-msgstr ""
+msgstr "נוכחי:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Input"
-msgstr ""
+msgstr "הוספת קלט"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr ""
+msgstr "הפסקת ×§×™×“×•× ×וטומטי"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "קביעת ×§×™×“×•× ×וטומטי"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Delete Input"
-msgstr ""
+msgstr "מחיקת קלט"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Animation tree is valid."
-msgstr ""
+msgstr "עץ הנפשה חוקי."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Animation tree is invalid."
-msgstr ""
+msgstr "×¢×¥ הנפשה ×œ× ×—×•×§×™."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Animation Node"
-msgstr ""
+msgstr "מפרק הנפשה"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "OneShot Node"
-msgstr ""
+msgstr "מפרק חד-פעמי"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Mix Node"
-msgstr ""
+msgstr "מפרק ערבוב"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr ""
+msgstr "מפרק Blend2"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr ""
+msgstr "מפרק Blend3"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr ""
+msgstr "מפרק Blend4"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "מפרק TimeScale"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "מפרק TimeSeek"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "מפרק מעברון"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Import Animations..."
-msgstr ""
+msgstr "×™×™×‘×•× ×”× ×¤×©×•×ª..."
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr ""
+msgstr "עריכת מסנני המפרק"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Filters..."
-msgstr ""
+msgstr "מסנני×..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Contents:"
-msgstr ""
+msgstr "תוכן:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "View Files"
-msgstr ""
+msgstr "הצגת קבצי×"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Connection error, please try again."
-msgstr ""
+msgstr "שגי×ת חיבור, ×× × × ×¡×” שוב."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
-msgstr ""
+msgstr "×œ× × ×™×ª×Ÿ להתחבר למ×רח:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr ""
+msgstr "×ין תגובה מהמ×רח:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
@@ -12101,6 +12108,14 @@ msgstr ""
"נתיב ×œ× ×—×•×§×™ לערכת פיתוח ×נדרו×יד עבור בנייה מות×מת ×ישית בהגדרות העורך."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12150,6 +12165,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12920,6 +12951,12 @@ msgstr "ניתן להקצות ×©×™× ×•×™×™× ×¨×§ בפונקצית vertex."
msgid "Constants cannot be modified."
msgstr "××™ ×פשר לשנות קבועי×."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "שמירת הפריסה נכשלה!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "ברירת המחדל של עורך הפריסה נדרסה."
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "העברה למעלה"
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index 26513d484f..c880a097f4 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -1029,14 +1029,19 @@ msgid "Owners Of:"
msgstr "के सà¥à¤µà¤¾à¤®à¥€:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "परियोजना से चयनित फ़ाइलों को हटा दें? (बहाल नहीं किया जा सकता है)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"निकाली गई फ़ाइलों को दूसरे संसाधनों दà¥à¤µà¤¾à¤°à¤¾ उनके लिठकाम करने के लिठआवशà¥à¤¯à¤• है\n"
"वैसे भी उनà¥à¤¹à¥‡à¤‚ निकालें? (कोई पूरà¥à¤µà¤µà¤¤ नहीं)"
@@ -2293,19 +2298,25 @@ msgid "Error saving TileSet!"
msgstr "तà¥à¤°à¥à¤Ÿà¤¿ बचत टाइलसेट!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "लेआउट को बचाने की कोशिश कर रहा तà¥à¤°à¥à¤Ÿà¤¿!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "डिफ़ॉलà¥à¤Ÿ संपादक लेआउट अभिभूत।"
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "लेआउट नाम नहीं मिला!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "आधार सेटिंगà¥à¤¸ के लिठडिफ़ॉलà¥à¤Ÿ लेआउट बहाल।"
#: editor/editor_node.cpp
@@ -3718,6 +3729,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "औटोलोड हिलाइये"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "नया दृशà¥à¤¯..."
@@ -11836,6 +11852,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11881,6 +11905,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12562,6 +12602,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "लेआउट को बचाने की कोशिश कर रहा तà¥à¤°à¥à¤Ÿà¤¿!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "डिफ़ॉलà¥à¤Ÿ संपादक लेआउट अभिभूत।"
+
#, fuzzy
#~ msgid "Add initial export..."
#~ msgstr "पसंदीदा:"
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index f5d71148a5..c3d47c9a8c 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -9,7 +9,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2020-10-19 21:08+0000\n"
+"PO-Revision-Date: 2020-11-17 11:07+0000\n"
"Last-Translator: LeoClose <leoclose575@gmail.com>\n"
"Language-Team: Croatian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hr/>\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3.1-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1011,14 +1011,19 @@ msgid "Owners Of:"
msgstr "Vlasnici:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Ukloni odabrane datoteke iz projekta? (Neće ih biti moguće vratiti)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Datoteke koje se uklanjaju su nužne drugim resursima kako bi ispravno "
"radili.\n"
@@ -1644,15 +1649,15 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled, Properties Disabled)"
-msgstr ""
+msgstr "(Editor Onemogućen, Svojstva Onemogućena)"
#: editor/editor_feature_profile.cpp
msgid "(Properties Disabled)"
-msgstr ""
+msgstr "(Svojstva Onemogućena)"
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled)"
-msgstr ""
+msgstr "(Editor Onemogućen)"
#: editor/editor_feature_profile.cpp
msgid "Class Options:"
@@ -1660,15 +1665,15 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "Enable Contextual Editor"
-msgstr ""
+msgstr "Omogući Kontekstni Editor"
#: editor/editor_feature_profile.cpp
msgid "Enabled Properties:"
-msgstr ""
+msgstr "Omogućena Svojstva:"
#: editor/editor_feature_profile.cpp
msgid "Enabled Features:"
-msgstr ""
+msgstr "Omogućene ZnaÄajke:"
#: editor/editor_feature_profile.cpp
msgid "Enabled Classes:"
@@ -1676,13 +1681,14 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
-msgstr ""
+msgstr "Format datoteke \"%s\" je nevažeći, uvoženje prekinuto."
#: editor/editor_feature_profile.cpp
msgid ""
"Profile '%s' already exists. Remove it first before importing, import "
"aborted."
msgstr ""
+"Profil '% s' već postoji. Prvo ga uklonite prije uvoza, uvoz je prekinut."
#: editor/editor_feature_profile.cpp
msgid "Error saving profile to path: '%s'."
@@ -1694,54 +1700,54 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
-msgstr ""
+msgstr "Trenutni Profil:"
#: editor/editor_feature_profile.cpp
msgid "Make Current"
-msgstr ""
+msgstr "UÄini Aktualnim"
#: editor/editor_feature_profile.cpp
#: editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/version_control_editor_plugin.cpp
msgid "New"
-msgstr ""
+msgstr "Novo"
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Uvoz"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "Izvoz"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
-msgstr ""
+msgstr "Dostupni Profili:"
#: editor/editor_feature_profile.cpp
msgid "Class Options"
-msgstr ""
+msgstr "Opcije Klase"
#: editor/editor_feature_profile.cpp
msgid "New profile name:"
-msgstr ""
+msgstr "Novi naziv profila:"
#: editor/editor_feature_profile.cpp
msgid "Erase Profile"
-msgstr ""
+msgstr "Brisanje Profila"
#: editor/editor_feature_profile.cpp
msgid "Godot Feature Profile"
-msgstr ""
+msgstr "Godot ZnaÄajke Profila"
#: editor/editor_feature_profile.cpp
msgid "Import Profile(s)"
-msgstr ""
+msgstr "Uvoz Profila"
#: editor/editor_feature_profile.cpp
msgid "Export Profile"
-msgstr ""
+msgstr "Izvoz Profila"
#: editor/editor_feature_profile.cpp
msgid "Manage Editor Feature Profiles"
@@ -2246,11 +2252,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2258,7 +2269,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3597,6 +3608,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Premjesti Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11593,6 +11609,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11637,6 +11661,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index 9f62027231..c61d953f31 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -1037,14 +1037,19 @@ msgid "Owners Of:"
msgstr "Tulajdonosai:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Eltávolítja a kiválasztott fájlokat a projektből? (nem visszavonható)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Az eltávolítandó fájlokat szükségelik más források a működésükhöz.\n"
"Eltávolítja őket ennek ellenére? (nem visszavonható)"
@@ -2293,19 +2298,25 @@ msgid "Error saving TileSet!"
msgstr "Hiba TileSet mentésekor!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Hiba történt az elrendezés mentésekor!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Alapértelmezett szerkesztő elrendezés felülírva."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Elrendezés neve nem található!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr ""
"Az alapértelmezett elrendezés vissza lett állítva az alap beállításokra."
@@ -3736,6 +3747,11 @@ msgid "Move To..."
msgstr "Ãthelyezés..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "AutoLoad Ãthelyezése"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Új jelenet..."
@@ -11808,6 +11824,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11852,6 +11876,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12531,6 +12571,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Hiba történt az elrendezés mentésekor!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Alapértelmezett szerkesztő elrendezés felülírva."
+
#~ msgid "Move pivot"
#~ msgstr "Forgatási pont áthelyezése"
diff --git a/editor/translations/id.po b/editor/translations/id.po
index f27203f1d7..7545e813a7 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -27,12 +27,13 @@
# zephyroths <ridho.hikaru@gmail.com>, 2020.
# Richard Urban <redasuio1@gmail.com>, 2020.
# yusuf afandi <afandi.yusuf.04@gmail.com>, 2020.
+# Habib Rohman <revolusi147id@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-03 15:29+0000\n"
-"Last-Translator: zephyroths <ridho.hikaru@gmail.com>\n"
+"PO-Revision-Date: 2020-11-13 22:59+0000\n"
+"Last-Translator: Habib Rohman <revolusi147id@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot/id/>\n"
"Language: id\n"
@@ -40,7 +41,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1051,14 +1052,19 @@ msgid "Owners Of:"
msgstr "Pemilik Dari:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Hapus berkas yang dipilih dari proyek? (tidak bisa dibatalkan)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"File-file yang telah dihapus diperlukan oleh resource lain agar mereka dapat "
"bekerja.\n"
@@ -1172,7 +1178,6 @@ msgid "Silver Sponsors"
msgstr "Donatur Perak"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Sponsors"
msgstr "Donatur Perunggu"
@@ -2325,19 +2330,25 @@ msgid "Error saving TileSet!"
msgstr "Error menyimpan TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Error mencoba untuk menyimpan layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Tata letak baku editor ditimpa."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nama layout tidak ditemukan!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Mengembalikan semula layout default ke pengaturan-pengaturan awal."
#: editor/editor_node.cpp
@@ -3781,6 +3792,11 @@ msgid "Move To..."
msgstr "Pindahkan ke..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Pindahkan Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Skena Baru…"
@@ -12105,6 +12121,14 @@ msgstr ""
"Editor."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12151,6 +12175,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12953,6 +12993,12 @@ msgstr "Variasi hanya bisa ditetapkan dalam fungsi vertex."
msgid "Constants cannot be modified."
msgstr "Konstanta tidak dapat dimodifikasi."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Error mencoba untuk menyimpan layout!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Tata letak baku editor ditimpa."
+
#~ msgid "Move pivot"
#~ msgstr "Pindahkan poros"
diff --git a/editor/translations/is.po b/editor/translations/is.po
index 446b94d017..6edc7afbd6 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -1036,14 +1036,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2273,11 +2276,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2285,7 +2293,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3631,6 +3639,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Hreyfa Viðbótar Lykil"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11704,6 +11717,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11748,6 +11769,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/it.po b/editor/translations/it.po
index 435789e66e..f7e3badb73 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -59,8 +59,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-28 11:18+0000\n"
-"Last-Translator: Mirko <miknsop@gmail.com>\n"
+"PO-Revision-Date: 2020-11-10 11:28+0000\n"
+"Last-Translator: Micila Micillotto <micillotto@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
"Language: it\n"
@@ -68,7 +68,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.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1080,14 +1080,19 @@ msgid "Owners Of:"
msgstr "Proprietari di:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Rimuovere i file selezionati dal progetto? (Non può essere annullato)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"I file che stanno per essere rimossi sono richiesti da altre risorse perché "
"esse funzionino.\n"
@@ -1646,34 +1651,32 @@ msgstr ""
"'Driver Fallback Enabled'."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"La piattaforma di destinazione richiede la compressione 'ETC' delle texture "
-"per GLES2. Attiva 'Import Etc' nelle impostazioni del progetto."
+"La piattaforma di destinazione richiede la compressione 'PVRTC' delle "
+"texture per GLES2. Attiva 'Import Pvrtc' nelle impostazioni del progetto."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"La piattaforma di destinazione richiede la compressione 'ETC2' delle texture "
-"per GLES3. Attiva 'Import Etc 2' nelle impostazioni del progetto."
+"La piattaforma di destinazione richiede la compressione 'ETC2' o 'PVRTC' "
+"delle texture per GLES3. Attiva 'Import Etc 2' oppure 'Import Pvrtc' nelle "
+"impostazioni del progetto."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"La piattaforma di destinazione richiede la compressione 'ETC' delle texture "
-"per il fallback del driver a GLES2.\n"
-"Attivare 'Import Etc' nelle impostazioni del progetto, oppure disattivare "
+"La piattaforma di destinazione richiede la compressione 'PVRTC' delle "
+"texture per il fallback del driver a GLES2.\n"
+"Attiva 'Import Pvrtc' nelle impostazioni del progetto, oppure disattiva "
"'Driver Fallback Enabled'."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -2358,19 +2361,25 @@ msgid "Error saving TileSet!"
msgstr "Errore di salvataggio del TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Errore nel salvataggio della disposizione!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Disposizione predefinita dell'editor sovrascritta."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nome della disposizione non trovato!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Ripristinata la disposizione predefinita alle impostazioni originali."
#: editor/editor_node.cpp
@@ -3820,6 +3829,11 @@ msgid "Move To..."
msgstr "Sposta in..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Sposta Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nuova scena…"
@@ -5288,50 +5302,43 @@ msgstr "Crea Guide Orizzontali e Verticali"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Imposta Pivot Offset CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "Ruota CanvasItem"
+msgstr "Ruota %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Ruota CanvasItem"
+msgstr "Ruota CanvasItem \"%s\" a %d gradi"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "Sposta CanvasItem"
+msgstr "Sposta Ancora CanvasItem \"%s\""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "Scala Node2D \"%s\" a (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Ridimensiona Control \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "Scala CanvasItem"
+msgstr "Scala %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "Scala CanvasItem"
+msgstr "Scala CanvasItem \"%s\" a (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "Sposta CanvasItem"
+msgstr "Sposta %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "Sposta CanvasItem"
+msgstr "Sposta CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6622,18 +6629,16 @@ msgid "Move Points"
msgstr "Sposta Punti"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Trascina: Ruota"
+msgstr "Command: Ruota"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: Muovi Tutti"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl: Scala"
+msgstr "Shift+Command: Scala"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6682,14 +6687,12 @@ msgid "Radius:"
msgstr "Raggio:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Crea Poligono e UV"
+msgstr "Copia Poligono su UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Converti in Polygon2D"
+msgstr "Copia UV su Poligono"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8238,13 +8241,12 @@ msgid "Paint Tile"
msgstr "Disegna tile"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift + LMB: Traccia una linea\n"
-"Shift + Ctrl + LMB: Colora il rettangolo"
+"Shift + LMB: Disegna Linea\n"
+"Shift + Ctrl + LMB: Disegna Rettangolo"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8775,9 +8777,8 @@ msgid "Add Node to Visual Shader"
msgstr "Aggiungi Nodo a Visual Shader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Nodo Spostato"
+msgstr "Nodo(i) Spostato(i)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8797,9 +8798,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "Tipo di Input Visual Shader Cambiato"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Imposta Nome Uniforme"
+msgstr "Nome UniformRef Modificato"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9520,7 +9520,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "Un riferimento ad una uniform esistente."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -12166,6 +12166,14 @@ msgstr ""
"dell'editor non è valido."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12218,20 +12226,37 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"\"Export AAB\" è valido soltanto quanto \"Use Custom Build\" è abilitato."
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab."
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "L'estensione APK non è compatibile con il Bundle Android App."
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk."
+
+#: platform/android/export/export.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -12268,13 +12293,15 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "Spostando l'output"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Impossibile copiare e rinominare il file di esportazione, controlla la "
+"directory del progetto gradle per gli output."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -13052,6 +13079,12 @@ msgstr "Varyings può essere assegnato soltanto nella funzione del vertice."
msgid "Constants cannot be modified."
msgstr "Le constanti non possono essere modificate."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Errore nel salvataggio della disposizione!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Disposizione predefinita dell'editor sovrascritta."
+
#~ msgid "Move pivot"
#~ msgstr "Sposta pivot"
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 8282aa0de2..1ea454e2f4 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -36,7 +36,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-19 21:08+0000\n"
+"PO-Revision-Date: 2020-11-04 02:39+0000\n"
"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot/ja/>\n"
@@ -45,7 +45,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.3.1-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1056,14 +1056,19 @@ msgid "Owners Of:"
msgstr "次ã®ã‚ªãƒ¼ãƒŠãƒ¼:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "é¸æŠžã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’プロジェクトã‹ã‚‰å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ(å…ƒã«æˆ»ã›ã¾ã›ã‚“)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"除去ã—よã†ã¨ã—ã¦ã„るファイルã¯ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã®å‹•ä½œã«å¿…è¦ã§ã™ã€‚\n"
"無視ã—ã¦é™¤åŽ»ã—ã¾ã™ã‹ï¼Ÿ(å…ƒã«æˆ»ã›ã¾ã›ã‚“)"
@@ -1619,35 +1624,33 @@ msgstr ""
"ã«ã—ã¦ãã ã•ã„。"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"対象プラットフォームã§ã¯GLES2ã®ãŸã‚ã«'ETC'テクスãƒãƒ£åœ§ç¸®ãŒå¿…è¦ã§ã™ã€‚プロジェ"
-"クト設定より 'Import Etc' をオンã«ã—ã¦ãã ã•ã„。"
+"対象プラットフォームã§ã¯GLES2ã®ãŸã‚ã«'PVRTC'テクスãƒãƒ£åœ§ç¸®ãŒå¿…è¦ã§ã™ã€‚プロ"
+"ジェクト設定より 'Import Pvrtc' をオンã«ã—ã¦ãã ã•ã„。"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"対象プラットフォームã§ã¯GLES3ã®ãŸã‚ã«'ETC2'テクスãƒãƒ£åœ§ç¸®ãŒå¿…è¦ã§ã™ã€‚プロジェ"
-"クト設定より 'Import Etc 2' をオンã«ã—ã¦ãã ã•ã„。"
+"対象プラットフォームã§ã¯GLES3ã®ãŸã‚ã« 'ETC2' ã‚ã‚‹ã„㯠'PVRTC' テクスãƒãƒ£åœ§ç¸®"
+"ãŒå¿…è¦ã§ã™ã€‚プロジェクト設定より 'Import Etc 2' ã‚ã‚‹ã„㯠'Import Pvrtc' をオ"
+"ンã«ã—ã¦ãã ã•ã„。"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"対象プラットフォームã§ã¯GLES2ã¸ãƒ•ã‚©ãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹ãŸã‚ã«'ETC'テクスãƒãƒ£åœ§ç¸®ãŒ"
-"å¿…è¦ã§ã™ã€‚\n"
-"プロジェクト設定より 'Import Etc' をオンã«ã™ã‚‹ã‹ã€'Fallback To Gles 2' をオフ"
-"ã«ã—ã¦ãã ã•ã„。"
+"対象プラットフォームã§ã¯GLES2ã¸ãƒ•ã‚©ãƒ¼ãƒ«ãƒãƒƒã‚¯ã™ã‚‹ãŸã‚ã« 'PVRTC' テクスãƒãƒ£åœ§"
+"縮ãŒå¿…è¦ã§ã™ã€‚\n"
+"プロジェクト設定より 'Import Pvrtc' をオンã«ã™ã‚‹ã‹ã€'Driver Fallback "
+"Enabled' をオフã«ã—ã¦ãã ã•ã„。"
#: editor/editor_export.cpp platform/android/export/export.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -2330,19 +2333,25 @@ msgid "Error saving TileSet!"
msgstr "タイルセットã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ï¼"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "レイアウトã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ï¼"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "デフォルトã®ã‚¨ãƒ‡ã‚£ã‚¿ レイアウトを上書ãã—ã¾ã—ãŸã€‚"
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "レイアウトåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ï¼"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "デフォルトã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã‚’基本設定ã«æˆ»ã—ã¾ã—ãŸã€‚"
#: editor/editor_node.cpp
@@ -3774,6 +3783,11 @@ msgid "Move To..."
msgstr "移動..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "自動読込ã¿ã‚’移動"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "æ–°è¦ã‚·ãƒ¼ãƒ³..."
@@ -5235,14 +5249,12 @@ msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "CanvasItemを回転"
+msgstr "%d 個ã®CanvasItemを回転"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "CanvasItemを回転"
+msgstr "CanvasItem \"%s\" を %d 度回転"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -11017,7 +11029,7 @@ msgstr "スクリプトã®ãƒ‘ス/åå‰ã¯æœ‰åŠ¹ã§ã™ã€‚"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
-msgstr "使用å¯èƒ½: a-zã€A-Zã€0-9åŠã³_。"
+msgstr "使用å¯èƒ½: a-zã€A-Zã€0-9ã€_ åŠã³ ."
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)."
@@ -12063,6 +12075,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr "エディタ設定ã®ã‚«ã‚¹ã‚¿ãƒ ãƒ“ルドã®Android SDKパスãŒç„¡åŠ¹ã§ã™ã€‚"
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12119,16 +12139,33 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"無効ãªãƒ•ã‚¡ã‚¤ãƒ«åã§ã™ï¼ Android App Bundle ã«ã¯æ‹¡å¼µå­ *.aab ãŒå¿…è¦ã§ã™ã€‚"
#: platform/android/export/export.cpp
msgid "APK Expansion not compatible with Android App Bundle."
-msgstr ""
+msgstr "APK Expansion 㯠Android App Bundle ã¨ã¯äº’æ›æ€§ãŒã‚ã‚Šã¾ã›ã‚“。"
#: platform/android/export/export.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr ""
+msgstr "無効ãªãƒ•ã‚¡ã‚¤ãƒ«åã§ã™ï¼ Android APKã«ã¯æ‹¡å¼µå­ *.apk ãŒå¿…è¦ã§ã™ã€‚"
#: platform/android/export/export.cpp
msgid ""
@@ -12173,6 +12210,8 @@ msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"エクスãƒãƒ¼ãƒˆãƒ•ã‚¡ã‚¤ãƒ«ã®ã‚³ãƒ”ーã¨åå‰ã®å¤‰æ›´ãŒã§ãã¾ã›ã‚“。出力çµæžœã‚’ã¿ã‚‹ã«ã¯"
+"gradleã®ãƒ—ロジェクトディレクトリを確èªã—ã¦ãã ã•ã„。"
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -12335,7 +12374,7 @@ msgid ""
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
"CollisionShape2Dã¯ã€CollisionObject2D派生ノードã«ã‚³ãƒªã‚¸ãƒ§ãƒ³ã‚·ã‚§ã‚¤ãƒ—ã‚’æä¾›ã™ã‚‹"
-"å ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚シェイプを追加ã™ã‚‹å ´åˆã¯ã€Area2Dã€staticBody2Dã€"
+"å ´åˆã«ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚シェイプを追加ã™ã‚‹å ´åˆã¯ã€Area2Dã€StaticBody2Dã€"
"RigidBody2Dã€KinematicBody2Dãªã©ã®å­ã¨ã—ã¦ä½¿ç”¨ã—ã¦ãã ã•ã„。"
#: scene/2d/collision_shape_2d.cpp
@@ -12931,6 +12970,12 @@ msgstr "Varying変数ã¯é ‚点関数ã«ã®ã¿å‰²ã‚Šå½“ã¦ã‚‹ã“ã¨ãŒã§ãã¾ã
msgid "Constants cannot be modified."
msgstr "定数ã¯å¤‰æ›´ã§ãã¾ã›ã‚“。"
+#~ msgid "Error trying to save layout!"
+#~ msgstr "レイアウトã®ä¿å­˜ã‚¨ãƒ©ãƒ¼ï¼"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "デフォルトã®ã‚¨ãƒ‡ã‚£ã‚¿ レイアウトを上書ãã—ã¾ã—ãŸã€‚"
+
#~ msgid "Move pivot"
#~ msgstr "ピボットを移動"
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index da05c4d847..63bd2b2d6e 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -1076,14 +1076,18 @@ msgstr "მფლáƒáƒ‘ელები:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "მáƒáƒ•áƒáƒ¨áƒáƒ áƒáƒ— მáƒáƒœáƒ˜áƒ¨áƒœáƒ£áƒšáƒ˜ ფáƒáƒ˜áƒšáƒ”ბი პრáƒáƒ”ქტიდáƒáƒœ? (უკáƒáƒœ დáƒáƒ‘რუნებრშეუძლებელიáƒ)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"ფáƒáƒ˜áƒšáƒ”ბი რáƒáƒ›áƒšáƒ”ბსáƒáƒª შლით სáƒáƒ­áƒ˜áƒ áƒáƒ სხვრრესურსებისთვის რáƒáƒ› იმუშáƒáƒáƒœ.\n"
"წáƒáƒ•áƒ¨áƒáƒšáƒáƒ— áƒáƒ›áƒ˜áƒ¡ მიუხედáƒáƒ•áƒáƒ“? (შეუძლებელირუკáƒáƒœ დáƒáƒ‘რუნებáƒ)"
@@ -2350,11 +2354,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2362,7 +2371,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3723,6 +3732,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
#, fuzzy
msgid "New Scene..."
msgstr "რესურსი"
@@ -11935,6 +11948,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11980,6 +12001,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index 267d5682be..24d0eed7f2 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -20,12 +20,13 @@
# Doyun Kwon <caen4516@gmail.com>, 2020.
# Jun Hyung Shin <shmishmi79@gmail.com>, 2020.
# Yongjin Jo <wnrhd114@gmail.com>, 2020.
+# Yungjoong Song <yungjoong.song@gmail.com>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-05 01:02+0000\n"
-"Last-Translator: Yongjin Jo <wnrhd114@gmail.com>\n"
+"PO-Revision-Date: 2020-10-31 23:15+0000\n"
+"Last-Translator: Yungjoong Song <yungjoong.song@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
"Language: ko\n"
@@ -33,7 +34,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.3-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -746,17 +747,17 @@ msgstr "스í¬ë¦½íŠ¸ íŒ¨ë„ í† ê¸€"
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom In"
-msgstr "확대"
+msgstr "줌 ì¸"
#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Out"
-msgstr "축소"
+msgstr "줌 아웃"
#: editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr "확대/축소 다시 설정"
+msgstr "줌 재설정"
#: editor/code_editor.cpp
msgid "Warnings"
@@ -1043,14 +1044,19 @@ msgid "Owners Of:"
msgstr "소유ìž:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "프로ì íŠ¸ì—ì„œ ì„ íƒí•œ 파ì¼ì„ 삭제할까요? (ë˜ëŒë¦´ 수 없습니다)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"삭제하려는 파ì¼ì€ 다른 리소스가 ë™ìž‘하기 위해 필요한 파ì¼ìž…니다.\n"
"무시하고 삭제할까요? (ë˜ëŒë¦´ 수 없습니다)"
@@ -1605,34 +1611,31 @@ msgstr ""
"Enabled' ì„¤ì •ì„ ë¹„í™œì„±í™” 하세요."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"ëŒ€ìƒ í”Œëž«í¼ì—ì„œ GLES2 ìš© 'ETC' í…스처 ì••ì¶•ì´ í•„ìš”í•©ë‹ˆë‹¤. 프로ì íŠ¸ 설정ì—ì„œ "
-"'Import Etc' ì„¤ì •ì„ ì¼œì„¸ìš”."
+"ëŒ€ìƒ í”Œëž«í¼ì—ì„œ GLES2 ìš© 'PVRTC' í…스처 ì••ì¶•ì´ í•„ìš”í•©ë‹ˆë‹¤. 프로ì íŠ¸ 설정ì—ì„œ "
+"'Import Pvrt' 를 활성화 하세요."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"ëŒ€ìƒ í”Œëž«í¼ì—ì„œ GLES3 ìš© 'ETC2' í…스처 ì••ì¶•ì´ í•„ìš”í•©ë‹ˆë‹¤. 프로ì íŠ¸ 설정ì—ì„œ "
-"'Import Etc 2' ì„¤ì •ì„ ì¼œì„¸ìš”."
+"ëŒ€ìƒ í”Œëž«í¼ì€ GLES3 ìš© 'ETC2' 나 'PVRTC' í…스처 ì••ì¶•ì´ í•„ìš”í•©ë‹ˆë‹¤. 프로ì íŠ¸ "
+"설정ì—ì„œ 'Import Etc 2' 나 'Import Pvrtc' 를 활성화 하세요."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"ëŒ€ìƒ í”Œëž«í¼ì—ì„œ ë“œë¼ì´ë²„ê°€ GLES2ë¡œ í´ë°±í•˜ê¸° 위해 'ETC' í…스처 ì••ì¶•ì´ í•„ìš”í•©ë‹ˆ"
-"다.\n"
-"프로ì íŠ¸ 설정ì—ì„œ 'Import Etc' ì„¤ì •ì„ í™œì„±í™” 하거나, 'Driver Fallback "
+"ëŒ€ìƒ í”Œëž«í¼ì—ì„œ ë“œë¼ì´ë²„ê°€ GLES2ë¡œ í´ë°±í•˜ê¸° 위해 'PVRTC' í…스처 ì••ì¶•ì´ í•„ìš”í•©"
+"니다.\n"
+"프로ì íŠ¸ 설정ì—ì„œ 'Import Pvrtc' ì„¤ì •ì„ í™œì„±í™” 하거나, 'Driver Fallback "
"Enabled' ì„¤ì •ì„ ë¹„í™œì„±í™” 하세요."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -2158,7 +2161,7 @@ msgstr "출력 지우기"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
#: editor/editor_profiler.cpp
msgid "Stop"
-msgstr "중단"
+msgstr "정지"
#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp
#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp
@@ -2311,19 +2314,25 @@ msgid "Error saving TileSet!"
msgstr "타ì¼ì…‹ 저장 중 오류!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "ë ˆì´ì•„웃 저장 중 오류!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "기본 편집기 ë ˆì´ì•„ì›ƒì„ ë®ì–´ì”니다."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "ë ˆì´ì•„웃 ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "기본 ë ˆì´ì•„ì›ƒì„ ì´ˆê¸°í™”í•˜ì˜€ìŠµë‹ˆë‹¤."
#: editor/editor_node.cpp
@@ -2822,14 +2831,17 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
+"ì´ ì˜µì…˜ì´ í™œì„±í™” ëœ ê²½ìš° ì› í´ë¦­ ë°°í¬ë¥¼ 사용하면 ì‹¤í–‰ì¤‘ì¸ í”„ë¡œì íŠ¸ë¥¼ 디버깅 "
+"í•  수 있ë„ë¡ì´ ì»´í“¨í„°ì˜ IPì— ì—°ê²°ì„ ì‹œë„합니다.\n"
+"ì´ ì˜µì…˜ì€ ì›ê²© 디버깅 (ì¼ë°˜ì ìœ¼ë¡œ ëª¨ë°”ì¼ ìž¥ì¹˜ 사용)ì— ì‚¬ìš©í•˜ê¸°ìœ„í•œ 것입니"
+"다.\n"
+"GDScript 디버거를 로컬ì—ì„œ 사용하기 위해 활성화 í•  필요는 없습니다."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Small Deploy with Network Filesystem"
msgstr "ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œì„ ì‚¬ìš©í•˜ì—¬ 작게 ë°°í¬"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, using one-click deploy for Android will only "
"export an executable without the project data.\n"
@@ -2838,60 +2850,55 @@ msgid ""
"On Android, deploying will use the USB cable for faster performance. This "
"option speeds up testing for projects with large assets."
msgstr ""
-"ì´ ì„¤ì •ì„ ì¼œë©´, 내보내거나 ë°°í¬í•  ë•Œ ìµœì†Œí•œì˜ ì‹¤í–‰ 파ì¼ì„ 만듭니다.\n"
-"ì´ ê²½ìš°, 실행 파ì¼ì´ ë„¤íŠ¸ì›Œí¬ ë„ˆë¨¸ì— ìžˆëŠ” íŽ¸ì§‘ê¸°ì˜ íŒŒì¼ ì‹œìŠ¤í…œì„ ì‚¬ìš©í•©ë‹ˆ"
-"다.\n"
-"Androidì˜ ê²½ìš°, ë°°í¬ ì‹œ ë” ë¹ ë¥¸ ì†ë„를 위해 USB ì¼€ì´ë¸”ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ ì„¤ì •"
-"ì€ ìš©ëŸ‰ì´ í° ê²Œìž„ì˜ í…ŒìŠ¤íŠ¸ ë°°í¬ ì†ë„를 í–¥ìƒì‹œí‚¬ 수 있습니다."
+"ì´ ì˜µì…˜ì„ í™œì„±í™”í•˜ê³  Android ìš© ì› í´ë¦­ ë°°í¬ë¥¼ 사용하면 프로ì íŠ¸ ë°ì´í„°ì—†ì´ "
+"실행 파ì¼ë§Œ ë‚´ 보냅니다.\n"
+"íŒŒì¼ ì‹œìŠ¤í…œì€ ë„¤íŠ¸ì›Œí¬ë¥¼ 통해 íŽ¸ì§‘ê¸°ì— ì˜í•´ 프로ì íŠ¸ì—ì„œ 제공ë©ë‹ˆë‹¤.\n"
+"Androidì˜ ê²½ìš°, ë°°í¬ì‹œ ë” ë¹ ë¥¸ ì†ë„를 위해 USB ì¼€ì´ë¸”ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. ì´ ì„¤ì •"
+"ì€ ìš©ëŸ‰ì´ í° ê²Œìž„ì˜ í…ŒìŠ¤íŠ¸ ì†ë„를 í–¥ìƒì‹œí‚µë‹ˆë‹¤."
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
msgstr "ì¶©ëŒ ëª¨ì–‘ ë³´ì´ê¸°"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, collision shapes and raycast nodes (for 2D and "
"3D) will be visible in the running project."
msgstr ""
-"ì´ ì„¤ì •ì„ ì¼œë©´ ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ (2D와 3Dìš©) Collision 모양과 Raycast 노드"
-"ê°€ ë³´ì´ê²Œ ë©ë‹ˆë‹¤."
+"ì´ ì„¤ì •ì„ ì¼œë©´ 프로ì íŠ¸ë¥¼ 실행하는 ë™ì•ˆ (2D와 3Dìš©) Collision 모양과 Raycast "
+"노드가 ë³´ì´ê²Œ ë©ë‹ˆë‹¤."
#: editor/editor_node.cpp
msgid "Visible Navigation"
msgstr "내비게ì´ì…˜ ë³´ì´ê¸°"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, navigation meshes and polygons will be visible "
"in the running project."
msgstr ""
-"ì´ ì„¤ì •ì„ ì¼œë©´, ê²Œìž„ì„ ì‹¤í–‰í•˜ëŠ” ë™ì•ˆ Navigation 메시와 í´ë¦¬ê³¤ì´ ë³´ì´ê²Œ ë©ë‹ˆ"
-"다."
+"ì´ ì„¤ì •ì„ ì¼œë©´,프로ì íŠ¸ë¥¼ 실행하는 ë™ì•ˆ Navigation 메시와 í´ë¦¬ê³¤ì´ ë³´ì´ê²Œ ë©"
+"니다."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Synchronize Scene Changes"
-msgstr "씬 변경 사항 ë™ê¸°í™”"
+msgstr "씬 변경사항 ë™ê¸°í™”"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, any changes made to the scene in the editor "
"will be replicated in the running project.\n"
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"ì´ ì„¤ì •ì´ í™œì„±í™”ëœ ê²½ìš°, 편집기ì—ì„œ ì”¬ì„ ìˆ˜ì •í•˜ë©´ 실행 ì¤‘ì¸ ê²Œìž„ì—ë„ ë°˜ì˜ë©ë‹ˆ"
-"다.\n"
-"ì›ê²© 장치ì—ì„œ ì‚¬ìš©ì¤‘ì¸ ê²½ìš° ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œ ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ë©´ ë”ìš± 효율"
-"ì ìž…니다."
+"ì´ ì„¤ì •ì´ í™œì„±í™”ëœ ê²½ìš°, 편집기ì—ì„œ ì”¬ì„ ìˆ˜ì •í•˜ë©´ ì‹¤í–‰ì¤‘ì¸ í”„ë¡œì íŠ¸ì— ë°˜ì˜ë©"
+"니다.\n"
+"ì›ê²©ìž¥ì¹˜ì—ì„œ ì‚¬ìš©ì¤‘ì¸ ê²½ìš° ë„¤íŠ¸ì›Œí¬ íŒŒì¼ ì‹œìŠ¤í…œ ê¸°ëŠ¥ì„ í™œì„±í™”í•˜ë©´ ë”ìš± 효율ì "
+"입니다."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Synchronize Script Changes"
-msgstr "스í¬ë¦½íŠ¸ 변경 사항 ë™ê¸°í™”"
+msgstr "스í¬ë¦½íŠ¸ 변경사항 ë™ê¸°í™”"
#: editor/editor_node.cpp
#, fuzzy
@@ -3005,7 +3012,7 @@ msgstr "ë””ë²„ê¹…ì„ í•˜ê¸° 위해 씬 ì‹¤í–‰ì„ ì¤‘ë‹¨í•©ë‹ˆë‹¤."
#: editor/editor_node.cpp
msgid "Pause Scene"
-msgstr "씬 멈추기"
+msgstr "씬 ì¼ì‹œì •ì§€"
#: editor/editor_node.cpp
msgid "Stop the scene."
@@ -3025,7 +3032,7 @@ msgstr "ì”¬ì„ ì§€ì •í•´ì„œ 실행합니다"
#: editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr "맞춤 씬 실행하기"
+msgstr "커스텀 씬 실행"
#: editor/editor_node.cpp
msgid "Changing the video driver requires restarting the editor."
@@ -3062,7 +3069,7 @@ msgstr "ì¸ìŠ¤íŽ™í„°"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr "하단 íŒ¨ë„ íŽ¼ì¹˜ê¸°"
+msgstr "하단 íŒ¨ë„ í™•ìž¥"
#: editor/editor_node.cpp
msgid "Output"
@@ -3746,6 +3753,11 @@ msgid "Move To..."
msgstr "여기로 ì´ë™..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "오토로드 ì´ë™"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "새 씬..."
@@ -5201,7 +5213,7 @@ msgstr "ìˆ˜í‰ ë° ìˆ˜ì§ ê°€ì´ë“œ 만들기"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "CanvasItem \"%s\" Pivot Offset (%d, %d)로 설정"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -5414,12 +5426,12 @@ msgstr "경고: 컨테ì´ë„ˆì˜ ìžì‹ 규모와 위치는 ë¶€ëª¨ì— ì˜í•´ ê²°ì
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Reset"
-msgstr "배율 초기화"
+msgstr "줌 초기화"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Select Mode"
-msgstr "ì„ íƒ ëª¨ë“œ"
+msgstr "모드 ì„ íƒ"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -5440,17 +5452,17 @@ msgstr "Alt+ìš°í´ë¦­: 겹친 ëª©ë¡ ì„ íƒ"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Move Mode"
-msgstr "ì´ë™ 모드"
+msgstr "ì´ë™ëª¨ë“œ"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Mode"
-msgstr "회전 모드"
+msgstr "회전모드"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Mode"
-msgstr "í¬ê¸° ì¡°ì ˆ 모드"
+msgstr "í¬ê¸°ì¡°ì ˆ 모드"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -8221,7 +8233,7 @@ msgstr "ì–´í´ë£¨ì „"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation"
-msgstr "내비게ì´ì…˜"
+msgstr "네비게ì´ì…˜"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Bitmask"
@@ -9379,7 +9391,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "기존 유니í¼ì— 대한 참조입니다."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -10335,19 +10347,16 @@ msgid "Batch Rename"
msgstr "ì¼ê´„ ì´ë¦„ 바꾸기"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Replace:"
-msgstr "바꾸기: "
+msgstr "바꾸기:"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Prefix:"
-msgstr "ì ‘ë‘사"
+msgstr "ì ‘ë‘사:"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Suffix:"
-msgstr "접미사"
+msgstr "접미사:"
#: editor/rename_dialog.cpp
msgid "Use Regular Expressions"
@@ -10394,9 +10403,8 @@ msgid "Per-level Counter"
msgstr "단계별 카운터"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "If set, the counter restarts for each group of child nodes."
-msgstr "설정하면 ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다"
+msgstr "설정하면 ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다."
#: editor/rename_dialog.cpp
msgid "Initial value for the counter"
@@ -10455,9 +10463,8 @@ msgid "Reset"
msgstr "ë˜ëŒë¦¬ê¸°"
#: editor/rename_dialog.cpp
-#, fuzzy
msgid "Regular Expression Error:"
-msgstr "ì •ê·œ í‘œí˜„ì‹ ì˜¤ë¥˜"
+msgstr "ì •ê·œ í‘œí˜„ì‹ ì˜¤ë¥˜:"
#: editor/rename_dialog.cpp
msgid "At character %s"
@@ -11988,6 +11995,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr "편집기 설정ì—ì„œ 맞춤 ë¹Œë“œì— ìž˜ëª»ëœ ì•ˆë“œë¡œì´ë“œ SDK 경로입니다."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12038,21 +12053,37 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr "\"Export AAB\"는 \"Use Custom Build\"ê°€ 활성화 ëœ ê²½ìš°ì—만 유효합니다."
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to delete unaligned APK."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "ìž˜ëª»ëœ íŒŒì¼ëª…! Android App Bundleì—는 * .aab 확장ìžê°€ 필요합니다."
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "APK í™•ìž¥ì€ Android App Bundleê³¼ 호환ë˜ì§€ 않습니다."
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr "ìž˜ëª»ëœ íŒŒì¼ëª…! Android APK는 *.apk 확장ìžê°€ 필요합니다."
+
+#: platform/android/export/export.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -12529,7 +12560,7 @@ msgstr ""
#: scene/3d/interpolated_camera.cpp
msgid ""
"InterpolatedCamera has been deprecated and will be removed in Godot 4.0."
-msgstr ""
+msgstr "InterpolatedCamera는 ë” ì´ìƒ 사용ë˜ì§€ 않으며 Godot 4.0ì—ì„œ 제거ë©ë‹ˆë‹¤."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -12830,6 +12861,12 @@ msgstr "Varyingì€ ê¼­ì§“ì  í•¨ìˆ˜ì—만 지정할 수 있습니다."
msgid "Constants cannot be modified."
msgstr "ìƒìˆ˜ëŠ” 수정할 수 없습니다."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "ë ˆì´ì•„웃 저장 중 오류!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "기본 편집기 ë ˆì´ì•„ì›ƒì„ ë®ì–´ì”니다."
+
#~ msgid "Move pivot"
#~ msgstr "피벗 ì´ë™"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index ce1f7b4a6a..505f8a7f64 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -1042,14 +1042,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2303,11 +2306,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2315,7 +2323,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3688,6 +3696,11 @@ msgstr ""
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Mix Nodas"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Atidaryti Skriptų Editorių"
@@ -11906,6 +11919,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11951,6 +11972,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 6fc7c196e7..e6f01427dd 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -7,12 +7,13 @@
# JÄnis Ondzuls <janisond@inbox.lv>, 2020.
# Anonymous <noreply@weblate.org>, 2020.
# StiLins <aigars.skilins@gmail.com>, 2020.
+# Rihards Kubilis <oldcar@inbox.lv>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-06-04 18:34+0000\n"
-"Last-Translator: StiLins <aigars.skilins@gmail.com>\n"
+"PO-Revision-Date: 2020-11-15 12:43+0000\n"
+"Last-Translator: Rihards Kubilis <oldcar@inbox.lv>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/"
"godot/lv/>\n"
"Language: lv\n"
@@ -21,7 +22,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.1-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1032,14 +1033,19 @@ msgid "Owners Of:"
msgstr "Īpašnieki:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Vai noņemt izvēlētos failus no projekta? (Netiks atjaunoti)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Faili, kurus Jūs vēlaties noņemt ir nepieciešami citiem resursiem lai tie "
"varÄ“tu strÄdÄt.\n"
@@ -1996,7 +2002,7 @@ msgstr ""
#: editor/editor_help.cpp
msgid "Constants"
-msgstr ""
+msgstr "Konstantes"
#: editor/editor_help.cpp
msgid "Property Descriptions"
@@ -2275,11 +2281,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2287,7 +2298,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3627,6 +3638,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Jauna Aina..."
@@ -11703,6 +11718,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11747,6 +11770,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/mi.po b/editor/translations/mi.po
index cfa15d7032..992701c61d 100644
--- a/editor/translations/mi.po
+++ b/editor/translations/mi.po
@@ -993,14 +993,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2225,11 +2228,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2237,7 +2245,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3576,6 +3584,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11552,6 +11564,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11596,6 +11616,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index 0fc2207a60..b7d56c64a0 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -1003,14 +1003,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2237,11 +2240,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2249,7 +2257,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3588,6 +3596,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11569,6 +11581,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11613,6 +11633,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index 8a4f7da346..f0658923ed 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -1000,14 +1000,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2232,11 +2235,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2244,7 +2252,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3583,6 +3591,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11560,6 +11572,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11604,6 +11624,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index fcafe6a26c..2db5b0bd78 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -1035,14 +1035,19 @@ msgid "Owners Of:"
msgstr "Pemilik:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Alih keluar fail terpilih dari projek? (Tidak dapat dipulihkan)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Fail yang akan dikeluarkan diperlukan oleh sumber lain agar dapat "
"berfungsi.\n"
@@ -2314,19 +2319,25 @@ msgid "Error saving TileSet!"
msgstr "Ralat semasa menyimpan TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Ralat semasa menyimpan susun atur!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Susun atur lalai telah diganti."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nama susun atur tidak dijumpai!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Tata letak lalai telah dipulihkan ke tetapan asas."
#: editor/editor_node.cpp
@@ -3686,6 +3697,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Pindah Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11700,6 +11716,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11744,6 +11768,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12414,6 +12454,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Ralat semasa menyimpan susun atur!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Susun atur lalai telah diganti."
+
#~ msgid "Move Anim Track Up"
#~ msgstr "Ubah Trek Anim Ke Atas"
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index f8862919b2..20037160d2 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -1088,14 +1088,18 @@ msgstr "Eiere Av:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Fjerne valgte filer fra prosjektet? (kan ikke angres)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Filene som fjernes kreves for at andre ressurser skal virke.\n"
"Fjern dem likevel? (kan ikke angres)"
@@ -2439,19 +2443,25 @@ msgid "Error saving TileSet!"
msgstr "Error ved lagring av TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Error ved lagring av layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Standard editor layout overskrevet."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Layoutnavn ikke funnet!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Gjenoppretter standard layout til grunninnstillinger."
#: editor/editor_node.cpp
@@ -3948,6 +3958,11 @@ msgstr "Flytt Til..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Flytt Autoload"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Ny Scene"
@@ -12561,6 +12576,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12606,6 +12629,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13295,6 +13334,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstanter kan ikke endres."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Error ved lagring av layout!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Standard editor layout overskrevet."
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "Flytt Pivot"
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index f8289c4c55..485dca4cf3 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -47,7 +47,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-08-28 13:09+0000\n"
+"PO-Revision-Date: 2020-10-30 10:21+0000\n"
"Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/"
"nl/>\n"
@@ -56,7 +56,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.2.1-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1071,16 +1071,21 @@ msgid "Owners Of:"
msgstr "Eigenaren van:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Geselecteerde bestanden uit het project verwijderen? (Kan niet ongedaan "
"gemaakt worden)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"De bestanden die verwijderd worden zijn nodig om andere bronnen te laten "
"werken.\n"
@@ -2350,19 +2355,25 @@ msgid "Error saving TileSet!"
msgstr "Error bij het opslaan van TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Fout bij het opslaan van indeling!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Standaardeditorindeling overschreven."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Indelingsnaam niet gevonden!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Standaardindeling teruggezet naar basisinstellingen."
#: editor/editor_node.cpp
@@ -3804,6 +3815,11 @@ msgid "Move To..."
msgstr "Verplaats Naar..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Autoload verplaatsen"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nieuwe scène..."
@@ -7889,9 +7905,8 @@ msgid "New Animation"
msgstr "Niewe animatie"
#: editor/plugins/sprite_frames_editor_plugin.cpp
-#, fuzzy
msgid "Speed:"
-msgstr "Snelheid (FPS):"
+msgstr "Snelheid:"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Loop"
@@ -12138,6 +12153,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr "Ongeldig Android SDK pad voor custom build in Editor Settings."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12192,6 +12215,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13005,6 +13044,12 @@ msgstr "Varyings kunnen alleen worden toegewezenin vertex functies."
msgid "Constants cannot be modified."
msgstr "Constanten kunnen niet worden aangepast."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Fout bij het opslaan van indeling!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Standaardeditorindeling overschreven."
+
#~ msgid "Move pivot"
#~ msgstr "Draaipunt verplaatsen"
diff --git a/editor/translations/or.po b/editor/translations/or.po
index 1144d93efd..c54279ee27 100644
--- a/editor/translations/or.po
+++ b/editor/translations/or.po
@@ -999,14 +999,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2231,11 +2234,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2243,7 +2251,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3582,6 +3590,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11558,6 +11570,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11602,6 +11622,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index 114e37d50a..ad95b4fc23 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -1067,14 +1067,19 @@ msgid "Owners Of:"
msgstr "Właściciele:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Usunąć wybrane pliki z projektu? (Nie można ich przywrócić)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Usuwany plik jest wymagany przez inne zasoby do działania.\n"
"Usunąć mimo to? (Nie można tego cofnąć)"
@@ -2335,19 +2340,25 @@ msgid "Error saving TileSet!"
msgstr "BÅ‚Ä…d podczas zapisywania TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Błąd podczas zapisu układu!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Domyślny układ edytora został nadpisany."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nie znaleziono nazwy układu!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Przywrócono domyślny układ do ustawień bazowych."
#: editor/editor_node.cpp
@@ -3780,6 +3791,11 @@ msgid "Move To..."
msgstr "PrzenieÅ› do..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Przemieść Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nowa scena..."
@@ -12091,6 +12107,14 @@ msgstr ""
"Edytora."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12145,6 +12169,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12964,6 +13004,12 @@ msgstr "Varying może być przypisane tylko w funkcji wierzchołków."
msgid "Constants cannot be modified."
msgstr "Stałe nie mogą być modyfikowane."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Błąd podczas zapisu układu!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Domyślny układ edytora został nadpisany."
+
#~ msgid "Move pivot"
#~ msgstr "Przesuń oś"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index b66652b18b..715962a2c0 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -1043,14 +1043,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2311,11 +2314,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2323,7 +2331,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3703,6 +3711,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Forge yer Node!"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11988,6 +12001,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12033,6 +12054,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index e22a5e7818..f21cb0cb6d 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -1043,14 +1043,19 @@ msgid "Owners Of:"
msgstr "Proprietários de:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Remover ficheiros selecionados do Projeto? (Sem desfazer)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Os ficheiros a serem removidos são necessários para que outros recursos "
"funcionem.\n"
@@ -2317,19 +2322,25 @@ msgid "Error saving TileSet!"
msgstr "Erro ao guardar TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Erro ao tentar guardar o Modelo!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "O modelo do editor predefinido foi substituído."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nome do Modelo não encontrado!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Modelo predefinido restaurado para as configurações base."
#: editor/editor_node.cpp
@@ -3768,6 +3779,11 @@ msgid "Move To..."
msgstr "Mover para..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Mover Carregamento Automático"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nova Cena..."
@@ -12064,6 +12080,14 @@ msgstr ""
"Configurações."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12118,6 +12142,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12927,6 +12967,12 @@ msgstr "Variações só podem ser atribuídas na função vértice."
msgid "Constants cannot be modified."
msgstr "Constantes não podem ser modificadas."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Erro ao tentar guardar o Modelo!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "O modelo do editor predefinido foi substituído."
+
#~ msgid "Move pivot"
#~ msgstr "Mover pivô"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index 1b81b4f77f..a4bc29327b 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -1123,14 +1123,19 @@ msgid "Owners Of:"
msgstr "Donos De:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Remover arquivos selecionados do projeto? (irreversível)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Os arquivos sendo removidos são requeridos por outros recursos para que "
"funcionem.\n"
@@ -2396,19 +2401,25 @@ msgid "Error saving TileSet!"
msgstr "Erro ao salvar TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Erro ao salvar o layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Layout padrão do editor sobrescrito."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Nome do layout não encontrado!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Layout padrão restaurado às configurações base."
#: editor/editor_node.cpp
@@ -3851,6 +3862,11 @@ msgid "Move To..."
msgstr "Mover Para..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Mover Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nova Cena..."
@@ -12168,6 +12184,14 @@ msgstr ""
"do Editor."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12222,6 +12246,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13033,6 +13073,12 @@ msgstr "Variáveis só podem ser atribuídas na função de vértice."
msgid "Constants cannot be modified."
msgstr "Constantes não podem serem modificadas."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Erro ao salvar o layout!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Layout padrão do editor sobrescrito."
+
#~ msgid "Move pivot"
#~ msgstr "Mover Pivô"
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 1bdb567685..182c978ee8 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -1042,14 +1042,19 @@ msgid "Owners Of:"
msgstr "Stăpâni La:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Ștergeți fișierele selectate din proiect? (Acțiune ireversibilă)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Fișierele în proces de ștergere sunt necesare pentru alte resurse ca ele să "
"sa funcționeze.\n"
@@ -2322,19 +2327,25 @@ msgid "Error saving TileSet!"
msgstr "Eroare la salvarea TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Eroare la încercarea de a salva schema!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Schemă implicită de editor suprascrisă."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Numele schemei nu a fost găsit!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "S-a restaurat schema implictă la setările de bază."
#: editor/editor_node.cpp
@@ -3756,6 +3767,11 @@ msgid "Move To..."
msgstr "Mută În..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Mutați Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Scenă nouă..."
@@ -12108,6 +12124,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12152,6 +12176,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12831,6 +12871,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Eroare la încercarea de a salva schema!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Schemă implicită de editor suprascrisă."
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "Mută Pivot"
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index d261bb8832..0a0c72a78f 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -92,7 +92,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-15 23:15+0000\n"
+"PO-Revision-Date: 2020-11-08 10:26+0000\n"
"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
@@ -102,7 +102,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.3.2\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1112,14 +1112,19 @@ msgid "Owners Of:"
msgstr "Владельцы:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Удалить выбранные файлы из проекта? (ÐÐµÐ»ÑŒÐ·Ñ Ð²Ð¾ÑÑтановить)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"УдалÑемый файл требуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð¾Ð¹ работы других реÑурÑов.\n"
"Ð’ÑÑ‘ равно удалить его? (ÐÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ!)"
@@ -1674,33 +1679,31 @@ msgstr ""
"Enabled»."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует Ñжатие текÑтур «ETC» Ð´Ð»Ñ GLES2. Включите «Import "
-"Etc» в ÐаÑтройках проекта."
+"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует Ñжатие текÑтур «PVRTC» Ð´Ð»Ñ GLES2. Включите «Import "
+"Pvrtc» в ÐаÑтройках проекта."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует компреÑÑию текÑтур «ETC2» Ð´Ð»Ñ GLES2. Включите "
-"«Import Etc 2» в ÐаÑтройках проекта."
+"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует компреÑÑию текÑтур «ETC2» или «PVRTC» Ð´Ð»Ñ GLES3. "
+"Включите «Import Etc 2» или «Import Pvrtc» в ÐаÑтройках проекта."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует ÑÐ¶Ð°Ñ‚Ð¸Ñ Ñ‚ÐµÐºÑтур «ETC» Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ°Ñ‚Ð° драйвера к GLES2.\n"
-"Включите «Import Etc» в ÐаÑтройках проекта или отключите «Driver Fallback "
+"Ð¦ÐµÐ»ÐµÐ²Ð°Ñ Ð¿Ð»Ð°Ñ‚Ñ„Ð¾Ñ€Ð¼Ð° требует ÑÐ¶Ð°Ñ‚Ð¸Ñ Ñ‚ÐµÐºÑтур «PVRTC» Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ°Ñ‚Ð° драйвера к "
+"GLES2.\n"
+"Включите «Import Pvrtc» в ÐаÑтройках проекта или отключите «Driver Fallback "
"Enabled»."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -2384,19 +2387,25 @@ msgid "Error saving TileSet!"
msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° тайлов!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Ошибка при попытке Ñохранить макет!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Переопределить макет по умолчанию."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Ðазвание макета не найдено!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Вернуть макет по умолчанию к Ñтандартному."
#: editor/editor_node.cpp
@@ -3832,6 +3841,11 @@ msgid "Move To..."
msgstr "ПеремеÑтить в..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "ПеремеÑтить автозагрузку"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "ÐÐ¾Ð²Ð°Ñ Ñцена..."
@@ -5292,50 +5306,43 @@ msgstr "Создать горизонтальные и вертикальные
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Задать Pivot Offset узла CanvasItem «%s» в (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "Вращать CanvasItem"
+msgstr "Вращать %d узлов CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Вращать CanvasItem"
+msgstr "Повернуть узел CanvasItem «%s» на %d градуÑов"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "ПеремеÑтить CanvasItem"
+msgstr "Передвинуть Ñкорь узла CanvasItem «%s»"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "МаÑштабировать узел Node2D «%s» в (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Изменить размер узла Control «%s» на (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "Вращать CanvasItem"
+msgstr "МаÑштабировать %d узлов CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "Вращать CanvasItem"
+msgstr "МаÑштабировать узел CanvasItem «%s» в (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "ПеремеÑтить CanvasItem"
+msgstr "Передвинуть %d узлов CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "ПеремеÑтить CanvasItem"
+msgstr "Передвинуть CanvasItem «%s» в (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6612,18 +6619,16 @@ msgid "Move Points"
msgstr "Передвинуть точки"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "Тащить: Поворот"
+msgstr "Command: Повернуть"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: Передвинуть вÑе"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl: МаÑштаб"
+msgstr "Shift+Command: МаÑштаб"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6671,14 +6676,12 @@ msgid "Radius:"
msgstr "РадиуÑ:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Создать полигон и UV"
+msgstr "Копировать полигон в UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Преобразовать в Polygon2D"
+msgstr "Копировать UV в полигон"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8228,13 +8231,12 @@ msgid "Paint Tile"
msgstr "ПокраÑить тайл"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
"Shift+ЛКМ: ÐариÑовать линию\n"
-"Shift+Ctrl+ЛКМ: ÐариÑовать прÑмоугольник"
+"Shift+Command+ЛКМ: ÐариÑовать прÑмоугольник"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8760,9 +8762,8 @@ msgid "Add Node to Visual Shader"
msgstr "Добавить узел в визуальный шейдер"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "Узел перемещён"
+msgstr "Узел(узлы) перемещён(ны)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8782,9 +8783,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "Изменен тип ввода визуального шейдера"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Задать Ð¸Ð¼Ñ uniform"
+msgstr "Ð˜Ð¼Ñ UniformRef изменено"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9499,7 +9499,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "СÑылка на ÑущеÑтвующий uniform."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -10654,7 +10654,7 @@ msgstr "Дополнить Ñценой(ами)"
#: editor/scene_tree_dock.cpp
msgid "Replace with Branch Scene"
-msgstr "Сохранить ветку как Ñцену"
+msgstr "Заменить на Ñцену-ветку"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
@@ -10867,11 +10867,11 @@ msgstr "Соединить Ñо Ñценой"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
-msgstr "Сохранить ветку, как Ñцену"
+msgstr "Сохранить ветку как Ñцену"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Copy Node Path"
-msgstr "Копировать путь ноды"
+msgstr "Копировать путь узла"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
@@ -11988,7 +11988,7 @@ msgstr "Удалить выделенное"
#: modules/visual_script/visual_script_editor.cpp
msgid "Find Node Type"
-msgstr "Ðайти тип нода"
+msgstr "Ðайти тип узла"
#: modules/visual_script/visual_script_editor.cpp
msgid "Copy Nodes"
@@ -12139,6 +12139,14 @@ msgstr ""
"редактора."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12190,20 +12198,38 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"«Export AAB» дейÑтвителен только при включённой опции «ИÑпользовать "
+"пользовательÑкую Ñборку»."
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "Ðеверное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°! Android App Bundle требует раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ *.aab."
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "APK Expansion неÑовмеÑтимо Ñ Android App Bundle."
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr "Ðеверное Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°! Android APK требует раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ *.apk."
+
+#: platform/android/export/export.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -12238,13 +12264,15 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "Перемещение выходных данных"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Ðевозможно Ñкопировать и переименовать файл ÑкÑпорта, проверьте диекторию "
+"проекта gradle на наличие выходных данных."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -13000,6 +13028,12 @@ msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть назначены только Ð
msgid "Constants cannot be modified."
msgstr "КонÑтанты не могут быть изменены."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Ошибка при попытке Ñохранить макет!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Переопределить макет по умолчанию."
+
#~ msgid "Move pivot"
#~ msgstr "ПеремеÑтить опорную точку"
diff --git a/editor/translations/si.po b/editor/translations/si.po
index 87851aa75a..a37f322236 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -1022,14 +1022,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2255,11 +2258,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2267,7 +2275,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3608,6 +3616,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11652,6 +11664,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11696,6 +11716,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index cedcac1f60..2ea30329d5 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -1027,14 +1027,19 @@ msgid "Owners Of:"
msgstr "Majitelia:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Odstrániť vybraté súbory z projektu? (nedá sa vrátiť späť)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Súbory ktoré budú odstránené vyžadujú ÄalÅ¡ie zdroje, aby mohli pracovaÅ¥.\n"
"Odstrániť aj napriek tomu? (nedá sa vrátiť späť)"
@@ -2298,19 +2303,25 @@ msgid "Error saving TileSet!"
msgstr "Error pri ukladaní TileSet-u!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Error pri ukladaní layout-i!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Predvolený editor layout je prepísaný."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Meno Layout-u sa nenašlo!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Obnovené predvolené rozloženie na základné nastavenia."
#: editor/editor_node.cpp
@@ -3740,6 +3751,11 @@ msgid "Move To..."
msgstr "Presunúť Do..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "Presunúť AutoLoad-y"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Nová Scéna..."
@@ -12002,6 +12018,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12047,6 +12071,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12741,6 +12781,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Error pri ukladaní layout-i!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Predvolený editor layout je prepísaný."
+
#~ msgid "Move pivot"
#~ msgstr "Presunúť pivot"
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index 5f0f2941a8..018ffe7b03 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -1084,14 +1084,18 @@ msgstr "Lastniki:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Odstranim izbrane datoteke iz projekta? (brez vrnitve)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Izbrisane datoteke so potrebne za delovanje drugih virov.\n"
"Ali jih vseeno odstranim? (brez vrnitve)"
@@ -2410,19 +2414,25 @@ msgid "Error saving TileSet!"
msgstr "Napaka pri shranjevanju PloÅ¡ÄnegaNiza!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Napaka pri shranjevanju postavitev!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Privzeti urejevalnik postavitev je bil prepisan."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Ime postavitve ni mogoÄe najti!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Privzeta postavitev je bila ponastavljena na osnovne nastaviteve."
#: editor/editor_node.cpp
@@ -3885,6 +3895,11 @@ msgstr "Premakni V..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Premakni SamodejnoNalaganje"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Nov Prizor"
@@ -12390,6 +12405,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12435,6 +12458,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13147,6 +13186,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Konstante ni možno spreminjati."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Napaka pri shranjevanju postavitev!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Privzeti urejevalnik postavitev je bil prepisan."
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "Premakni ToÄko"
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index fcc1ee403d..f9b1341f29 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -1026,14 +1026,18 @@ msgstr "Pronarët e:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Hiq skedarët e zgjedhur nga projekti? (pa kthim pas)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Skedarët që do të hiqen janë të kërkuara nga resurse të tjera në mënyrë që "
"ato të funksionojnë.\n"
@@ -2349,19 +2353,25 @@ msgid "Error saving TileSet!"
msgstr "Gabim gjatë ruajtjes së TileSet-it!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Gabim duke provuar të ruaj faqosjen!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Faqosja e parazgjedhur e editorit u mbishkel."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Emri i faqosjes nuk u gjet!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Riktheu faqosjen e parazgjedhur në opsionet bazë."
#: editor/editor_node.cpp
@@ -3825,6 +3835,11 @@ msgstr "Lëviz në..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Lëviz Autoload-in"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Skenë e Re"
@@ -11991,6 +12006,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12035,6 +12058,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12707,6 +12746,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Gabim duke provuar të ruaj faqosjen!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Faqosja e parazgjedhur e editorit u mbishkel."
+
#, fuzzy
#~ msgid "Add initial export..."
#~ msgstr "Shto te të preferuarat"
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 68cddb924c..06298476d6 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -1139,14 +1139,18 @@ msgstr "ВлаÑници:"
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Обриши одабране датотеке из пројекта? (ÐЕМРОПОЗИВÐЊÐ)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Жељене датотеке за бриÑање Ñу потребне за рад других реÑурÑа.\n"
"Ипак их обриши? (ÐЕМРОПОЗИВÐЊÐ)"
@@ -2528,19 +2532,25 @@ msgid "Error saving TileSet!"
msgstr "Грешка при чувању TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Грешка при чувању раÑпореда!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Уобичајен раÑпоред је преуређен."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Име раÑпореда није пронађен!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "ПоÑтави подразумевани изглед на почетну вредноÑÑ‚."
#: editor/editor_node.cpp
@@ -4080,6 +4090,11 @@ msgstr "Помери у..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Помери аутоматÑко учитавање"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Ðова Ñцена"
@@ -13591,6 +13606,14 @@ msgstr ""
"Ðеважећа Android SDK путања за произвољну изградњу у Подешавањима Уредника."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
#, fuzzy
msgid ""
"Android build template not installed in the project. Install it from the "
@@ -13640,6 +13663,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -14559,6 +14598,12 @@ msgstr "Варијације могу Ñамо бити одређене у фу
msgid "Constants cannot be modified."
msgstr "КонÑтанте није могуће мењати."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Грешка при чувању раÑпореда!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Уобичајен раÑпоред је преуређен."
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "Помери пивот"
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index acd02840c7..2f3379ec14 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -1031,14 +1031,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2269,11 +2272,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2281,7 +2289,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3625,6 +3633,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11741,6 +11753,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11785,6 +11805,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index 86a496279a..a3c1c190dc 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -19,12 +19,14 @@
# André Andersson <andre.eric.andersson@gmail.com>, 2020.
# Andreas Westrell <andreas.westrell@gmail.com>, 2020.
# Gustav Andersson <gustav.andersson96@outlook.com>, 2020.
+# Shaggy <anton_christoffersson@hotmail.com>, 2020.
+# Marcus Toftedahl <marcus.toftedahl@his.se>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-29 09:14+0000\n"
-"Last-Translator: Gustav Andersson <gustav.andersson96@outlook.com>\n"
+"PO-Revision-Date: 2020-11-04 02:39+0000\n"
+"Last-Translator: Marcus Toftedahl <marcus.toftedahl@his.se>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/godot-engine/"
"godot/sv/>\n"
"Language: sv\n"
@@ -32,7 +34,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -913,9 +915,8 @@ msgid "Signals"
msgstr "Signaler"
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Filter signals"
-msgstr "Filtrera Filer..."
+msgstr "Filtrera signaler"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from this signal?"
@@ -1043,14 +1044,19 @@ msgid "Owners Of:"
msgstr "Ägare av:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Ta bort valda filer från projektet? (Kan ej återställas)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Filerna som tas bort krävs av andra resurser för att de ska fungera.\n"
"Ta bort dem ändå? (går inte ångra)"
@@ -1089,9 +1095,8 @@ msgid "Permanently delete %d item(s)? (No undo!)"
msgstr "Ta bort %d sak(er) permanent? (Går inte ångra!)"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid "Show Dependencies"
-msgstr "Beroenden"
+msgstr "Visa Beroenden"
#: editor/dependency_editor.cpp
msgid "Orphan Resource Explorer"
@@ -1161,12 +1166,10 @@ msgid "Gold Sponsors"
msgstr "Guldsponsorer"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Silver Sponsors"
msgstr "Silverdonatorer"
#: editor/editor_about.cpp
-#, fuzzy
msgid "Bronze Sponsors"
msgstr "Bronsdonatorer"
@@ -1308,9 +1311,8 @@ msgid "Delete Bus Effect"
msgstr "Ta bort Buss-Effekt"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Drag & drop to rearrange."
-msgstr "Ljud-Buss, dra och släpp för att ändra ordning."
+msgstr "Dra och släpp för att ändra ordning."
#: editor/editor_audio_buses.cpp
msgid "Solo"
@@ -1370,12 +1372,10 @@ msgid "Move Audio Bus"
msgstr "Flytta Ljud-Buss"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Save Audio Bus Layout As..."
msgstr "Spara Ljud-Buss Layout Som..."
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Location for New Layout..."
msgstr "Plats för Ny Layout..."
@@ -1615,6 +1615,10 @@ msgid ""
"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
+"Målplattformen kräver 'ETC' texturkomprimering så GLES2 kan användas som "
+"reserv grafik drivare.\n"
+"Aktivera 'Import Etc' i Projektinställningarna eller deaktivera 'Driver "
+"Fallback Enabled'."
#: editor/editor_export.cpp
#, fuzzy
@@ -1655,7 +1659,7 @@ msgstr "Mallfil hittades inte:"
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
msgid "Custom release template not found."
-msgstr ""
+msgstr "Anpassad release mall hittades inte."
#: editor/editor_export.cpp platform/javascript/export/export.cpp
msgid "Template file not found:"
@@ -1663,7 +1667,7 @@ msgstr "Mallfil hittades inte:"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
-msgstr ""
+msgstr "Den inbäddade PCK får inte vara större än 4 GiB på 32 bitars exporter."
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1706,7 +1710,7 @@ msgstr "Ersätt Alla"
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
-msgstr ""
+msgstr "Profilen måste ha ett giltigt filnamn och får inte innehålla '.'"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1715,7 +1719,7 @@ msgstr "En fil eller mapp med detta namn finns redan."
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled, Properties Disabled)"
-msgstr ""
+msgstr "(Editor inaktiverad, Egenskaper inaktiverad)"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1734,7 +1738,7 @@ msgstr "Beskrivning:"
#: editor/editor_feature_profile.cpp
msgid "Enable Contextual Editor"
-msgstr ""
+msgstr "Aktivera kontextuell redigerare"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1743,7 +1747,7 @@ msgstr "Egenskaper"
#: editor/editor_feature_profile.cpp
msgid "Enabled Features:"
-msgstr ""
+msgstr "Aktivera funktioner:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1752,13 +1756,15 @@ msgstr "Sök Klasser"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
-msgstr ""
+msgstr "Fil '%s''s format är ogiltig, import avbruten"
#: editor/editor_feature_profile.cpp
msgid ""
"Profile '%s' already exists. Remove it first before importing, import "
"aborted."
msgstr ""
+"Profilen '%s' finns redan. Ta bort den före du importerar. Importeringen "
+"avbruten."
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1816,7 +1822,7 @@ msgstr "Radera punkter"
#: editor/editor_feature_profile.cpp
msgid "Godot Feature Profile"
-msgstr ""
+msgstr "Godot funktions profil"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1970,11 +1976,11 @@ msgstr "Växla Dolda Filer"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails."
-msgstr ""
+msgstr "sortera objekt som ett rutnät av bilder."
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a list."
-msgstr ""
+msgstr "Visa objekt som lista."
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -2369,11 +2375,16 @@ msgid "Error saving TileSet!"
msgstr "Fel vid sparande av TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Fel vid försök att spara layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2381,7 +2392,7 @@ msgid "Layout name not found!"
msgstr "Layoutnamn hittades inte!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3829,6 +3840,11 @@ msgstr "Flytta Till..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Flytta Autoload"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Ny Scen"
@@ -12275,6 +12291,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12320,6 +12344,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13032,6 +13072,9 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr ""
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Fel vid försök att spara layout!"
+
#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "Flytta Upp"
diff --git a/editor/translations/ta.po b/editor/translations/ta.po
index 233ec40229..cf3e8a2cc3 100644
--- a/editor/translations/ta.po
+++ b/editor/translations/ta.po
@@ -1027,14 +1027,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2261,11 +2264,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2273,7 +2281,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3616,6 +3624,11 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "சேர௠மà¯à®•à¯à®•à®¿à®¯à®ªà¯à®ªà¯à®³à¯à®³à®¿à®¯à¯ˆ நகரà¯à®¤à¯à®¤à¯"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11650,6 +11663,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11694,6 +11715,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 8d4a4192e8..235f63fdcc 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -1002,14 +1002,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2234,11 +2237,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2246,7 +2254,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3585,6 +3593,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11562,6 +11574,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11606,6 +11626,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 4f0cf780a4..84b8d405b5 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-15 17:26+0000\n"
+"PO-Revision-Date: 2020-10-31 23:15+0000\n"
"Last-Translator: Thanachart Monpassorn <nunf_2539@hotmail.com>\n"
"Language-Team: Thai <https://hosted.weblate.org/projects/godot-engine/godot/"
"th/>\n"
@@ -20,7 +20,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.3-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1020,14 +1020,19 @@ msgid "Owners Of:"
msgstr "เจ้าของของ:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "ลบไฟล์ที่เลือà¸à¸­à¸­à¸à¸ˆà¸²à¸à¹‚ปรเจà¸à¸•à¹Œ? (à¸à¸¹à¹‰à¸„ืนไม่ได้)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"ไฟล์ที่à¸à¸³à¸¥à¸±à¸‡à¸ˆà¸°à¸¥à¸š จำเป็นสำหรับใช้งานโดยทรัพยาà¸à¸£à¸­à¸±à¸™à¸­à¸·à¹ˆà¸™\n"
"จะทำà¸à¸²à¸£à¸¥à¸šà¸«à¸£à¸·à¸­à¹„ม่? (คืนà¸à¸¥à¸±à¸šà¹„ม่ได้)"
@@ -1580,33 +1585,30 @@ msgstr ""
"เปิด 'Import Etc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เทà¸à¹€à¸ˆà¸­à¸£à¹Œ 'ETC' สำหรับ GLES2 เปิด 'Import Etc' "
+"à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เทà¸à¹€à¸ˆà¸­à¸£à¹Œ 'ETC' สำหรับ GLES2 à¸à¸£à¸¸à¸“าเปิด 'Import Etc' "
"ในตั้งค่าโปรเจ็ค"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เทà¸à¹€à¸ˆà¸­à¸£à¹Œ 'ETC2' สำหรับ GLES3 เปิด 'Import Etc 2' "
-"ในตั้งค่าโปรเจ็ค"
+"à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เทà¸à¹€à¸ˆà¸­à¸£à¹Œ 'ETC2' สำหรับ GLES3 à¸à¸£à¸¸à¸“าเปิด 'Import Etc "
+"2' หรือ 'Import Pvrtc' ในตั้งค่าโปรเจ็ค"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เทà¸à¹€à¸ˆà¸­à¸£à¹Œ 'ETC' สำหรับà¸à¸²à¸£à¸à¸¥à¸±à¸šà¸¡à¸²à¹ƒà¸Šà¹‰ GLES2\n"
-"เปิด 'Import Etc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'"
+"à¹à¸žà¸¥à¸•à¸Ÿà¸­à¸£à¹Œà¸¡à¹€à¸›à¹‰à¸²à¸«à¸¡à¸²à¸¢à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸à¸²à¸£à¸šà¸µà¸šà¸­à¸±à¸”เทà¸à¹€à¸ˆà¸­à¸£à¹Œ 'PVRTC' สำหรับà¸à¸²à¸£à¸à¸¥à¸±à¸šà¸¡à¸²à¹ƒà¸Šà¹‰ GLES2\n"
+"เปิด 'Import Pvrtc' ในตั้งค่าโปรเจ็คหรือปิด 'Driver Fallback Enabled'"
#: editor/editor_export.cpp platform/android/export/export.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -2274,19 +2276,25 @@ msgid "Error saving TileSet!"
msgstr "ผิดพลาดขณะบันทึà¸à¹„ทล์เซต!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "ผิดพลาดขณะบันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸­à¸²à¸•à¹Œ!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "à¹à¸—นที่เลย์เอาต์เริ่มต้น"
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "ไม่พบชื่อเลย์เอาต์!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "คืนเลย์เอาต์เป็นค่าเริ่มต้น"
#: editor/editor_node.cpp
@@ -3682,6 +3690,11 @@ msgid "Move To..."
msgstr "ย้ายไป..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "เลื่อนออโต้โหลด"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "ฉาà¸à¹ƒà¸«à¸¡à¹ˆ..."
@@ -5125,50 +5138,43 @@ msgstr "สร้างเส้นไà¸à¸”์à¹à¸™à¸§à¸•à¸±à¹‰à¸‡à¹à¸¥à¸°à¹
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "ตั้งออฟเซ็ตจุดหมุน CanvasItem \"%s\" ไปยัง (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "หมุน CanvasItem"
+msgstr "หมุน %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "หมุน CanvasItem"
+msgstr "หมุน CanvasItem \"%s\" ไปที่ %d องศา"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "เลื่อน CanvasItem"
+msgstr "เลื่อนจุดยึด CanvasItem \"%s\""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "ปรับขนาด Node2D \"%s\" ไปยัง (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "ปรับขนาด Control \"%s\" ไปยัง (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "ขนาด CanvasItem"
+msgstr "ปรับขนาด %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "ขนาด CanvasItem"
+msgstr "ปรับขนาด CanvasItem \"%s\" ไปยัง (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "เลื่อน CanvasItem"
+msgstr "เลื่อน %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "เลื่อน CanvasItem"
+msgstr "เลื่อน CanvasItem \"%s\" ไปยัง (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6431,16 +6437,14 @@ msgid "Move Points"
msgstr "ย้ายจุด"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "ลาà¸: หมุน"
+msgstr "ctrl: หมุน"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: ย้ายทั้งหมด"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
msgstr "Shift+Ctrl: ปรับขนาด"
@@ -6489,14 +6493,12 @@ msgid "Radius:"
msgstr "รัศมี:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "สร้าง Polygon à¹à¸¥à¸° UV"
+msgstr "คัดลอà¸à¹‚พลีà¸à¸­à¸™à¹„ปยังยูวี"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "à¹à¸›à¸¥à¸‡à¹€à¸›à¹‡à¸™ Polygon2D"
+msgstr "คัดลอà¸à¸¢à¸¹à¸§à¸µà¹„ปยังโพลีà¸à¸­à¸™"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8036,13 +8038,12 @@ msgid "Paint Tile"
msgstr "วาดไทล์"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift+LMB: วาดเส้น\n"
-"Shift+Ctrl+LMB: วาดสี่เหลี่ยม"
+"Shift+คลิà¸à¸‹à¹‰à¸²à¸¢: วาดเส้น\n"
+"Shift+Ctrl+คลิà¸à¸‹à¹‰à¸²à¸¢: วาดสี่เหลี่ยม"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8564,9 +8565,8 @@ msgid "Add Node to Visual Shader"
msgstr "เพิ่มโหนดไปยังเวอร์ชวลเชดเดอร์"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "ย้ายโหนดเรียบร้อย"
+msgstr "เลื่อนโหนดà¹à¸¥à¹‰à¸§"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8586,9 +8586,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "เปลี่ยนชนิดของอินพุตเวอร์ชวลเชดเดอร์"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "ตั้งชื่อยูนิฟอร์ม"
+msgstr "เปลี่ยนชื่อ UniformRef à¹à¸¥à¹‰à¸§"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9285,7 +9284,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "à¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸–ึงยูนิฟอร์มที่มีอยู่"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -11859,6 +11858,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr "ที่อยู่ Android SDK ผิดพลาดสำหรับà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹à¸šà¸šà¸à¸³à¸«à¸™à¸”เองในà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าเอดิเตอร์"
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11904,21 +11911,37 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr "\"Export AAB\" จะใช้ได้เฉพาะเมื่อเปิดใช้งาน \"Use Custom Build\""
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to delete unaligned APK."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "ชื่อไฟล์ผิดพลาด! à¹à¸­à¸™à¸”รอยด์à¹à¸­à¸›à¸šà¸±à¸™à¹€à¸”ิลจำเป็นต้องมีนามสà¸à¸¸à¸¥ *.aab"
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "à¸à¸²à¸£à¸‚ยาย APK เข้าà¸à¸±à¸™à¹„ม่ได้à¸à¸±à¸šà¹à¸­à¸™à¸”รอยด์à¹à¸­à¸›à¸šà¸±à¸™à¹€à¸”ิล"
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr "ชื่อไฟล์ผิดพลาด! à¹à¸­à¸™à¸”รอยด์ APK จำเป็นต้องมีนามสà¸à¸¸à¸¥ *.apk"
+
+#: platform/android/export/export.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -11951,13 +11974,14 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "à¸à¸³à¸¥à¸±à¸‡à¸¢à¹‰à¸²à¸¢à¹€à¸­à¸²à¸•à¹Œà¸žà¸¸à¸•"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"ไม่สามารถคัดลอà¸à¹à¸¥à¸°à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸Šà¸·à¹ˆà¸­à¹„ฟล์ส่งออภตรวจสอบไดเร็à¸à¸—อรีโปรเจ็à¸à¸•à¹Œ gradle สำหรับเอาต์พุต"
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -12659,6 +12683,12 @@ msgstr "Varyings สามารถà¸à¸³à¸«à¸™à¸”ในังà¸à¹Œà¸Šà¸±à¸™à¹€
msgid "Constants cannot be modified."
msgstr "ค่าคงที่ไม่สามารถà¹à¸à¹‰à¹„ขได้"
+#~ msgid "Error trying to save layout!"
+#~ msgstr "ผิดพลาดขณะบันทึà¸à¹€à¸¥à¸¢à¹Œà¹€à¸­à¸²à¸•à¹Œ!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "à¹à¸—นที่เลย์เอาต์เริ่มต้น"
+
#~ msgid "Move pivot"
#~ msgstr "ย้ายจุดหมุน"
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 91dd17c218..a9608e8771 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -1078,14 +1078,19 @@ msgid "Owners Of:"
msgstr "Şunların sahipleri:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Kaldırılmakta olan dosyalar başka kaynakların çalışması için gerekli.\n"
"Yine de kaldırmak istiyor musunuz? (geri alınamaz)"
@@ -2349,19 +2354,25 @@ msgid "Error saving TileSet!"
msgstr "TileSet kaydedilirken hata!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken hata!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Varsayılan düzenleyici yerleşim düzeni geçersiz kılındı."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Yerleşim Düzeni adı bulunamadı!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Varsayılan yerleşim düzeni temel ayarlarına geri döndürüldü."
#: editor/editor_node.cpp
@@ -3798,6 +3809,11 @@ msgid "Move To..."
msgstr "Şuraya Taşı..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "KendindenYüklenme'yi Taşı"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Yeni Sahne..."
@@ -12091,6 +12107,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr "Editör Ayarlarında özel derleme için geçersiz Android SDK yolu."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12145,6 +12169,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12960,6 +13000,12 @@ msgstr "varyings yalnızca vertex işlevinde atanabilir."
msgid "Constants cannot be modified."
msgstr "Sabit deÄŸerler deÄŸiÅŸtirilemez."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Yerleşim Düzeni kaydedilmeye çalışılırken hata!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Varsayılan düzenleyici yerleşim düzeni geçersiz kılındı."
+
#~ msgid "Move pivot"
#~ msgstr "Merkezi Taşı"
diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po
index 1a370d7ef9..0ea50916b6 100644
--- a/editor/translations/tzm.po
+++ b/editor/translations/tzm.po
@@ -1000,14 +1000,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2232,11 +2235,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2244,7 +2252,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3583,6 +3591,10 @@ msgid "Move To..."
msgstr ""
#: editor/filesystem_dock.cpp
+msgid "Move to Trash"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr ""
@@ -11559,6 +11571,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11603,6 +11623,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index d1a9f9132c..14771ef010 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Godot Engine)\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-09-29 09:14+0000\n"
+"PO-Revision-Date: 2020-10-30 10:21+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot/uk/>\n"
@@ -29,7 +29,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.3.2-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1047,15 +1047,20 @@ msgid "Owners Of:"
msgstr "ВлаÑники:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Вилучити позначені файли з проєкту? (Вилучені файли не вдаÑÑ‚ÑŒÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"Файли, що видалÑÑŽÑ‚ÑŒÑÑ, вимагаютьÑÑ Ñ–Ð½ÑˆÐ¸Ð¼Ð¸ реÑурÑами, щоб вони могли "
"працювати.\n"
@@ -1611,33 +1616,32 @@ msgstr ""
"«Увімкнено резервні драйвери»."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"Платформа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‚ÐµÐºÑтур «ETC» Ð´Ð»Ñ GLES2. Увімкніть "
-"пункт «Імпортувати ETC» у параметрах проєкту."
+"Платформа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‚ÐµÐºÑтур «PVRTC» Ð´Ð»Ñ GLES2. "
+"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"Платформа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‚ÐµÐºÑтур «ETC2» Ð´Ð»Ñ GLES3. Увімкніть "
-"пункт «Імпортувати ETC 2» у параметрах проєкту."
+"Платформа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‚ÐµÐºÑтур «ETC2» або «PVRTC» Ð´Ð»Ñ "
+"GLES3. Увімкніть пункт «Імпортувати ETC 2» або «Імпортувати Pvrtc» у "
+"параметрах проєкту."
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"Платформа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‚ÐµÐºÑтур «ETC» Ð´Ð»Ñ GLES2.\n"
-"Увімкніть пункт «Імпортувати ETC» у параметрах проєкту або вимкніть пункт "
+"Платформа Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” ÑтиÑÐºÐ°Ð½Ð½Ñ Ñ‚ÐµÐºÑтур «PVRTC» Ð´Ð»Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð³Ð¾ "
+"варіанта драйверів GLES2.\n"
+"Увімкніть пункт «Імпортувати Pvrtc» у параметрах проєкту або вимкніть пункт "
"«Увімкнено резервні драйвери»."
#: editor/editor_export.cpp platform/android/export/export.cpp
@@ -2320,19 +2324,25 @@ msgid "Error saving TileSet!"
msgstr "Помилка Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ тайлів!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Помилка при Ñпробі зберегти компонуваннÑ!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Типове ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° перевизначено."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Ðазву ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ знайдено!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Відновлено типове ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° базовими параметрами."
#: editor/editor_node.cpp
@@ -3775,6 +3785,11 @@ msgid "Move To..."
msgstr "ПереміÑтити до..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "ПереміÑтити автозавантаженнÑ"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "Створити Ñцену…"
@@ -5241,50 +5256,43 @@ msgstr "Створити горизонтальні та вертикальні
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "Ð’Ñтановити зÑув бази CanvasItem «%s» у (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "Обертати CanvasItem"
+msgstr "Обертати %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "Обертати CanvasItem"
+msgstr "Обернути CanvasItem «%s» на %d градуÑів"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "ПереÑунути CanvasItem"
+msgstr "ПереÑунути прив'Ñзку CanvasItem «%s»"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "МаÑштабувати Node2D «%s» до (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "Змінити розміри елемента ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Â«%s» до (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "МаÑштабувати CanvasItem"
+msgstr "МаÑштабувати %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "МаÑштабувати CanvasItem"
+msgstr "МаÑштабувати CanvasItem «%s» до (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "ПереÑунути CanvasItem"
+msgstr "ПереÑунути %d CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "ПереÑунути CanvasItem"
+msgstr "ПереÑунути CanvasItem «%s» до (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -6564,18 +6572,16 @@ msgid "Move Points"
msgstr "ПереміÑтити точки"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "ПеретÑгуваннÑ: Поворот"
+msgstr "Command: Обертати"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: ПереміÑтити вÑÑ–"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl: МаÑштаб"
+msgstr "Shift+Command: МаÑштабувати"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6623,14 +6629,12 @@ msgid "Radius:"
msgstr "РадіуÑ:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "Створити полігон і UV"
+msgstr "Копіювати полігон до UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "Перетворити на Polygon2D"
+msgstr "Копіювати UV до полігона"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -8181,13 +8185,12 @@ msgid "Paint Tile"
msgstr "Ðамалювати плитку"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
"Shift+ліва кнопка: малювати лінію\n"
-"Shift+Ctrl+ліва кнопка: малювати прÑмокутник"
+"Shift+Command+ліва кнопка: малювати прÑмокутник"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8718,9 +8721,8 @@ msgid "Add Node to Visual Shader"
msgstr "Додати вузол до візуального шейдера"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
-msgstr "ПереÑунуто вузол"
+msgstr "ПереÑунуто вузли"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Duplicate Nodes"
@@ -8740,9 +8742,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "Змінено тип Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð²Ñ–Ð·ÑƒÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ шейдера"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "Ð’Ñтановити однорідну назву"
+msgstr "Змінено однорідну назву"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9460,7 +9461,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° наÑвну однорідніÑÑ‚ÑŒ."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -12102,6 +12103,14 @@ msgstr ""
"редактора."
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12156,18 +12165,39 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
+"Пункт «ЕкÑпортувати AAB» Ñ” чинним, лише Ñкщо увімкнено «ВикориÑтовувати "
+"нетипове збираннÑ»."
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
+"Ðекоректна назва файла! Пакет програми Android повинен мати ÑÑƒÑ„Ñ–ÐºÑ Ð½Ð°Ð·Ð²Ð¸ *."
+"aab."
#: platform/android/export/export.cpp
msgid "APK Expansion not compatible with Android App Bundle."
-msgstr ""
+msgstr "Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ APK Ñ” неÑуміÑним із Android App Bundle."
#: platform/android/export/export.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
msgstr ""
+"Ðекоректна назва файла! Пакунок Android APK повинен мати ÑÑƒÑ„Ñ–ÐºÑ Ð½Ð°Ð·Ð²Ð¸ *.apk."
#: platform/android/export/export.cpp
msgid ""
@@ -12207,13 +12237,15 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "ПереÑÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð¸Ñ… даних"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
msgstr ""
+"Ðе вдалоÑÑ Ñкопіювати Ñ– перейменувати файл екÑпортованих даних. Виведені "
+"дані можна знайти у каталозі проєкту gradle."
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -12987,6 +13019,12 @@ msgstr "Змінні величини можна пов'Ñзувати лише
msgid "Constants cannot be modified."
msgstr "Сталі не можна змінювати."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Помилка при Ñпробі зберегти компонуваннÑ!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Типове ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¾Ñ€Ð° перевизначено."
+
#~ msgid "Move pivot"
#~ msgstr "ПереÑунути опорну точку"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index 0daae77789..c8eaf85501 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -1020,14 +1020,17 @@ msgid "Owners Of:"
msgstr ""
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2279,11 +2282,16 @@ msgid "Error saving TileSet!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2291,7 +2299,7 @@ msgid "Layout name not found!"
msgstr ""
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr ""
#: editor/editor_node.cpp
@@ -3655,6 +3663,11 @@ msgstr ""
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "ایکشن منتقل کریں"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "سب سکریپشن بنائیں"
@@ -11856,6 +11869,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11900,6 +11921,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index 446a1ce2fa..8198ca9ba7 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -1043,14 +1043,18 @@ msgid "Owners Of:"
msgstr "Sở hữu của:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "Gỡ bá» các tệp đã chá»n trong dá»± án? (Không thể khôi phục)"
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2334,19 +2338,25 @@ msgid "Error saving TileSet!"
msgstr "Lỗi khi lưu các TileSet!"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "Lỗi khi cố gắng lưu bố cục!"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "Bố cục trình biên tập mặc định bị ghi đè."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "Tên bố cục không tìm thấy!"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "Äã khôi phục bố cục mặc định cho các thiết lập."
#: editor/editor_node.cpp
@@ -3754,6 +3764,11 @@ msgstr "Di chuyển đến..."
#: editor/filesystem_dock.cpp
#, fuzzy
+msgid "Move to Trash"
+msgstr "Di chuyển Nút"
+
+#: editor/filesystem_dock.cpp
+#, fuzzy
msgid "New Scene..."
msgstr "Tạo Cảnh Mới"
@@ -12086,6 +12101,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12133,6 +12156,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -12827,6 +12866,12 @@ msgstr ""
msgid "Constants cannot be modified."
msgstr "Không thể chỉnh sửa hằng số."
+#~ msgid "Error trying to save layout!"
+#~ msgstr "Lỗi khi cố gắng lưu bố cục!"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "Bố cục trình biên tập mặc định bị ghi đè."
+
#~ msgid "Move pivot"
#~ msgstr "Di chuyển trục"
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 4ce2d7c14d..c40aea356f 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -71,11 +71,12 @@
# MintSoda <lionlxh@qq.com>, 2020.
# Gardner Belgrade <hapenia@sina.com>, 2020.
# godhidden <z2zz2zz@yahoo.com>, 2020.
+# BinotaLIU <me@binota.org>, 2020.
msgid ""
msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2020-10-18 14:21+0000\n"
+"PO-Revision-Date: 2020-11-13 22:59+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"
@@ -84,7 +85,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.3.1-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -93,17 +94,17 @@ msgstr "convert() çš„å‚数类型无效,请使用 TYPE_* 常é‡ã€‚"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr "仅需è¦é•¿åº¦ä¸º1的字符串(1字符)。"
+msgstr "应为长度 1 的字符串(1 字符)。"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr "没有足够的字节æ¥è§£ç ï¼Œæˆ–æ ¼å¼æ— æ•ˆã€‚"
+msgstr "没有足够的字节å¯è§£ç æˆ–æ ¼å¼æ— æ•ˆã€‚"
#: core/math/expression.cpp
msgid "Invalid input %i (not passed) in expression"
-msgstr "表达å¼ä¸­åŒ…å«çš„%i无效(未传递)"
+msgstr "表达å¼çš„输入 %i 无效(未传递)"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
@@ -111,7 +112,7 @@ msgstr "实例为 null(未传递),无法使用 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"
@@ -127,7 +128,7 @@ msgstr "构造 '%s' çš„å‚数无效"
#: core/math/expression.cpp
msgid "On call to '%s':"
-msgstr "在调用'%s'时:"
+msgstr "在调用 '%s' 时:"
#: core/ustring.cpp
msgid "B"
@@ -260,7 +261,7 @@ msgstr "属性轨é“"
#: editor/animation_track_editor.cpp
msgid "3D Transform Track"
-msgstr "3Då˜æ¢è½¨é“"
+msgstr "3D å˜æ¢è½¨é“"
#: editor/animation_track_editor.cpp
msgid "Call Method Track"
@@ -317,7 +318,7 @@ msgstr "切æ¢å½“å‰è½¨é“开关。"
#: editor/animation_track_editor.cpp
msgid "Update Mode (How this property is set)"
-msgstr "更新模å¼ï¼ˆå¦‚何设置此属性)"
+msgstr "更新模å¼ï¼ˆå±žæ€§è®¾ç½®æ–¹æ³•ï¼‰"
#: editor/animation_track_editor.cpp
msgid "Interpolation Mode"
@@ -337,7 +338,7 @@ msgstr "时间(秒): "
#: editor/animation_track_editor.cpp
msgid "Toggle Track Enabled"
-msgstr "å¯ç”¨è½¨é“切æ¢"
+msgstr "å¯ç”¨ï¼ç¦ç”¨è½¨é“"
#: editor/animation_track_editor.cpp
msgid "Continuous"
@@ -411,7 +412,7 @@ msgstr "是å¦ä¸º %s 新建轨é“并æ’入关键帧?"
#: editor/animation_track_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr "是å¦æ–°å»º%d个轨é“并æ’入关键帧?"
+msgstr "是å¦æ–°å»º %d 个轨é“并æ’入关键帧?"
#: editor/animation_track_editor.cpp editor/create_dialog.cpp
#: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp
@@ -431,7 +432,7 @@ msgstr "æ’入动画"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
-msgstr "动画播放器ä¸èƒ½å¯¹è‡ªå·±åšåŠ¨ç”»ï¼Œåªæœ‰å…¶å®ƒæ’­æ”¾å™¨æ‰å¯ä»¥ã€‚"
+msgstr "AnimationPlayer ä¸èƒ½åŠ¨ç”»åŒ–自己,åªå¯åŠ¨ç”»åŒ–其它 Player。"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -455,7 +456,7 @@ msgstr "é‡æ–°æŽ’列轨é“"
#: editor/animation_track_editor.cpp
msgid "Transform tracks only apply to Spatial-based nodes."
-msgstr "å˜æ¢è½¨è¿¹ä»…应用基于Spatial节点的节点。"
+msgstr "å˜æ¢è½¨è¿¹ä»…应用到基于 Spatial 节点。"
#: editor/animation_track_editor.cpp
msgid ""
@@ -471,7 +472,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Animation tracks can only point to AnimationPlayer nodes."
-msgstr "动画轨迹åªèƒ½æŒ‡å‘AnimationPlayer节点。"
+msgstr "动画轨迹åªèƒ½æŒ‡å‘ AnimationPlayer 节点。"
#: editor/animation_track_editor.cpp
msgid "An animation player can't animate itself, only other players."
@@ -479,7 +480,7 @@ msgstr "动画播放器ä¸èƒ½åŠ¨ç”»åŒ–自己,åªèƒ½åŠ¨ç”»åŒ–其他播放器。
#: editor/animation_track_editor.cpp
msgid "Not possible to add a new track without a root"
-msgstr "无法在没有root的情况下新建轨é“"
+msgstr "没有根节点时无法添加新轨é“"
#: editor/animation_track_editor.cpp
msgid "Invalid track for Bezier (no suitable sub-properties)"
@@ -495,7 +496,7 @@ msgstr "轨é“路径无效,因此无法添加键。"
#: editor/animation_track_editor.cpp
msgid "Track is not of type Spatial, can't insert key"
-msgstr "轨é“ä¸æ˜¯Spatial类型,无法æ’入帧"
+msgstr "轨é“ä¸æ˜¯ Spatial 类型,无法æ’入帧"
#: editor/animation_track_editor.cpp
msgid "Add Transform Track Key"
@@ -536,7 +537,7 @@ msgstr "缩放动画关键帧"
#: editor/animation_track_editor.cpp
msgid ""
"This option does not work for Bezier editing, as it's only a single track."
-msgstr "此选项ä¸é€‚用于è´å¡žå°”编辑,因为它åªæ˜¯å•ä¸ªè½¨é“。"
+msgstr "由于åªæœ‰å•ä¸€è½¨é“,因此该选项ä¸é€‚用于è´å¡žå°”编辑。"
#: editor/animation_track_editor.cpp
msgid ""
@@ -553,8 +554,8 @@ msgstr ""
"此动画属于导入的场景,因此ä¸ä¼šä¿å­˜å¯¹å¯¼å…¥è½¨é“的更改。\n"
"\n"
"è¦å¯ç”¨æ·»åŠ è‡ªå®šä¹‰è½¨é“的功能,å¯ä»¥åœ¨åœºæ™¯çš„导入设置中将\n"
-"“Animation > Storageâ€è®¾ä¸ºâ€œ Filesâ€ï¼Œå¯ç”¨â€œAnimation > Keep Custom Tracksâ€ï¼Œç„¶åŽ"
-"é‡æ–°å¯¼å…¥ã€‚\n"
+"“Animation > Storage†设为 “ Filesâ€ï¼Œå¹¶å¯ç”¨ “Animation > Keep Custom "
+"Tracksâ€ï¼Œç„¶åŽé‡æ–°å¯¼å…¥ã€‚\n"
"或者也å¯ä»¥ä½¿ç”¨å°†åŠ¨ç”»å¯¼å…¥ä¸ºå•ç‹¬æ–‡ä»¶çš„导入预设。"
#: editor/animation_track_editor.cpp
@@ -563,7 +564,7 @@ msgstr "警告:正在编辑导入的动画"
#: editor/animation_track_editor.cpp
msgid "Select an AnimationPlayer node to create and edit animations."
-msgstr "选择一个AnimationPlayer节点以创建和编辑动画。"
+msgstr "选择一个 AnimationPlayer 节点以创建和编辑动画。"
#: editor/animation_track_editor.cpp
msgid "Only show tracks from nodes selected in tree."
@@ -571,7 +572,7 @@ msgstr "仅显示在树中选择的节点的轨é“。"
#: editor/animation_track_editor.cpp
msgid "Group tracks by node or display them as plain list."
-msgstr "按节点分组或将它们显示为普通列表。"
+msgstr "按节点分组或将节点显示为普通列表。"
#: editor/animation_track_editor.cpp
msgid "Snap:"
@@ -711,7 +712,7 @@ msgstr "å¤åˆ¶"
#: editor/animation_track_editor.cpp
msgid "Select All/None"
-msgstr "全选/å–消"
+msgstr "全选ï¼å–消"
#: editor/animation_track_editor_plugins.cpp
msgid "Add Audio Track Clip"
@@ -747,19 +748,19 @@ msgstr "è¡Œå·ï¼š"
#: editor/code_editor.cpp
msgid "%d replaced."
-msgstr "已替æ¢%d处。"
+msgstr "å·²æ›¿æ¢ %d 处。"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "%d match."
-msgstr "%d 匹é…。"
+msgstr "%d 个匹é…。"
#: editor/code_editor.cpp editor/editor_help.cpp
msgid "%d matches."
-msgstr "%d 匹é…项。"
+msgstr "%d 个匹é…。"
#: editor/code_editor.cpp editor/find_in_files.cpp
msgid "Match Case"
-msgstr "大å°å†™åŒ¹é…"
+msgstr "区分大å°å†™"
#: editor/code_editor.cpp editor/find_in_files.cpp
msgid "Whole Words"
@@ -784,7 +785,7 @@ msgstr "标准"
#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp
msgid "Toggle Scripts Panel"
-msgstr "切æ¢è„šæœ¬é¢æ¿"
+msgstr "å¼€å¯ï¼å…³é—­è„šæœ¬é¢æ¿"
#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/texture_region_editor_plugin.cpp
@@ -822,7 +823,7 @@ msgstr "方法å称必须是一个有效的标识符。"
msgid ""
"Target method not found. Specify a valid method or attach a script to the "
"target node."
-msgstr "找ä¸åˆ°ç›®æ ‡æ–¹æ³•ã€‚请指定一个有效的方法或者把脚本附加到目标节点。"
+msgstr "找ä¸åˆ°ç›®æ ‡æ–¹æ³•ã€‚请指定一个有效的方法或把脚本附加到目标节点。"
#: editor/connections_dialog.cpp
msgid "Connect to Node:"
@@ -918,15 +919,15 @@ msgstr "ä¿¡å·ï¼š"
#: editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr "连接“%sâ€åˆ°â€œ%sâ€"
+msgstr "连接 “%s†到 “%sâ€"
#: editor/connections_dialog.cpp
msgid "Disconnect '%s' from '%s'"
-msgstr "将“%sâ€ä»Žâ€œ%sâ€æ–­å¼€"
+msgstr "将 “%s†从 “%s†断开"
#: editor/connections_dialog.cpp
msgid "Disconnect all from signal: '%s'"
-msgstr "断开所有与信å·â€œ%sâ€çš„连接"
+msgstr "æ–­å¼€æ‰€æœ‰ä¸Žä¿¡å· â€œ%s†的连接"
#: editor/connections_dialog.cpp
msgid "Connect..."
@@ -947,7 +948,7 @@ msgstr "编辑连接:"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
-msgstr "你确定è¦ä»Žä¿¡å·â€œ%sâ€ä¸­ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?"
+msgstr "确定è¦ä»Žä¿¡å· “%s†中移除所有连接å—?"
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
@@ -959,7 +960,7 @@ msgstr "筛选信å·"
#: editor/connections_dialog.cpp
msgid "Are you sure you want to remove all connections from this signal?"
-msgstr "你确定è¦ä»Žè¯¥å¹¿æ’­ä¿¡å·ä¸­ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?"
+msgstr "确定è¦ä»Žè¯¥ä¿¡å·ä¸­ç§»é™¤æ‰€æœ‰è¿žæŽ¥å—?"
#: editor/connections_dialog.cpp
msgid "Disconnect All"
@@ -975,7 +976,7 @@ msgstr "跳转到方法"
#: editor/create_dialog.cpp
msgid "Change %s Type"
-msgstr "更改%s类型"
+msgstr "更改 %s 类型"
#: editor/create_dialog.cpp editor/project_settings_editor.cpp
msgid "Change"
@@ -983,7 +984,7 @@ msgstr "更改"
#: editor/create_dialog.cpp
msgid "Create New %s"
-msgstr "新建%s"
+msgstr "创建 %s"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1027,7 +1028,7 @@ msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"场景“%sâ€æ­£è¢«ä¿®æ”¹ã€‚\n"
+"场景 “%s†正被修改。\n"
"修改åªæœ‰åœ¨é‡æ–°åŠ è½½åŽæ‰èƒ½ç”Ÿæ•ˆã€‚"
#: editor/dependency_editor.cpp
@@ -1035,7 +1036,7 @@ msgid ""
"Resource '%s' is in use.\n"
"Changes will only take effect when reloaded."
msgstr ""
-"资æºâ€œ%sâ€æ­£åœ¨ä½¿ç”¨ä¸­ã€‚\n"
+"èµ„æº â€œ%s†正在使用中。\n"
"修改åªæœ‰åœ¨é‡æ–°åŠ è½½åŽæ‰èƒ½ç”Ÿæ•ˆã€‚"
#: editor/dependency_editor.cpp
@@ -1083,14 +1084,19 @@ msgid "Owners Of:"
msgstr "拥有者:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "是å¦ä»Žé¡¹ç›®ä¸­åˆ é™¤é€‰å®šæ–‡ä»¶ï¼Ÿï¼ˆæ— æ³•æ¢å¤ï¼‰"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
"è¦åˆ é™¤çš„文件被其他资æºæ‰€ä¾èµ–。\n"
"ä»ç„¶è¦åˆ é™¤å—?(无法撤销)"
@@ -1125,7 +1131,7 @@ msgstr "加载出错ï¼"
#: editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr "永久删除选中的%dæ¡é¡¹ç›®å—?(此æ“作无法撤销ï¼ï¼‰"
+msgstr "è¦æ°¸ä¹…删除选中的 %d æ¡é¡¹ç›®å—?(此æ“作无法撤销ï¼ï¼‰"
#: editor/dependency_editor.cpp
msgid "Show Dependencies"
@@ -1153,19 +1159,19 @@ msgstr "没有显å¼ä»Žå±žå…³ç³»çš„资æºï¼š"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Key"
-msgstr "修改字典的键"
+msgstr "修改字典键"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Value"
-msgstr "改å˜å­—典的值"
+msgstr "改å˜å­—典值"
#: editor/editor_about.cpp
msgid "Thanks from the Godot community!"
-msgstr "Godot社区致谢ï¼"
+msgstr "Godot 社区感谢你ï¼"
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
-msgstr "Godot引擎贡献者"
+msgstr "Godot Engine 贡献者"
#: editor/editor_about.cpp
msgid "Project Founders"
@@ -1184,7 +1190,7 @@ msgstr "项目管ç†å‘˜ "
#: editor/editor_about.cpp
msgid "Developers"
-msgstr "å¼€å‘者"
+msgstr "å¼€å‘人员"
#: editor/editor_about.cpp
msgid "Authors"
@@ -1241,8 +1247,8 @@ msgid ""
"is an exhaustive list of all such third-party components with their "
"respective copyright statements and license terms."
msgstr ""
-"Godot引擎ä¾èµ–多个第三方å…费开æºä»£ç åº“,这些库全部兼容MIT许å¯è¯çš„æ¡æ¬¾ã€‚以下是"
-"所有此类第三方组件åŠå…¶å„自版æƒå£°æ˜Žå’Œè®¸å¯æ¡æ¬¾çš„详尽列表。"
+"Godot 引擎ä¾èµ–多个第三方å…费开æºä»£ç åº“,这些库全部兼容 MIT 许å¯è¯çš„æ¡æ¬¾ã€‚以下"
+"是所有此类第三方组件åŠå…¶å„自版æƒå£°æ˜Žå’Œè®¸å¯æ¡æ¬¾çš„详尽列表。"
#: editor/editor_about.cpp
msgid "All Components"
@@ -1258,7 +1264,7 @@ msgstr "许å¯è¯"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Error opening package file, not in ZIP format."
-msgstr "打开压缩文件时出错,éžZIPæ ¼å¼ã€‚"
+msgstr "æ‰“å¼€åŒ…æ–‡ä»¶æ—¶å‡ºé”™ï¼Œéž ZIP æ ¼å¼ã€‚"
#: editor/editor_asset_installer.cpp
msgid "%s (Already Exists)"
@@ -1274,7 +1280,7 @@ msgstr "以下文件无法从包中æå–:"
#: editor/editor_asset_installer.cpp
msgid "And %s more files."
-msgstr "以åŠå…¶å®ƒ%s个文件。"
+msgstr "以åŠå…¶å®ƒ %s 个文件。"
#: editor/editor_asset_installer.cpp editor/project_manager.cpp
msgid "Package installed successfully!"
@@ -1315,15 +1321,15 @@ msgstr "修改音频总线音é‡"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr "开关音频总线独å¥"
+msgstr "å¼€ï¼å…³éŸ³é¢‘总线独å¥"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
-msgstr "开关音频总线é™éŸ³"
+msgstr "é™éŸ³ï¼å–消é™éŸ³éŸ³é¢‘总线"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Bypass Effects"
-msgstr "开关音频总线æ—通效果"
+msgstr "å¼€å¯ï¼å…³é—­éŸ³é¢‘总线æ—通效果"
#: editor/editor_audio_buses.cpp
msgid "Select Audio Bus Send"
@@ -1416,7 +1422,7 @@ msgstr "打开音频总线布局"
#: editor/editor_audio_buses.cpp
msgid "There is no '%s' file."
-msgstr "文件“%sâ€ä¸å­˜åœ¨ã€‚"
+msgstr "文件 “%s†ä¸å­˜åœ¨ã€‚"
#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp
msgid "Layout"
@@ -1478,7 +1484,7 @@ msgstr "有效字符:"
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing engine class name."
-msgstr "与引擎内置类型å称冲çªã€‚"
+msgstr "与引擎内置类å称冲çªã€‚"
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing built-in type name."
@@ -1490,27 +1496,27 @@ msgstr "与已存在的全局常é‡å称冲çªã€‚"
#: editor/editor_autoload_settings.cpp
msgid "Keyword cannot be used as an autoload name."
-msgstr "该å称已被用作其他 autoload å ç”¨ã€‚"
+msgstr "关键字ä¸å¯ç”¨ä½œ Autoload å称。"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr "Autoload '%s'已存在ï¼"
+msgstr "Autoload '%s' 已存在ï¼"
#: editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr "é‡å‘½å自动加载脚本"
+msgstr "é‡å‘½å Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr "切æ¢å…¨å±€AutoLoad"
+msgstr "å¼€å¯ï¼å…³é—­å…¨å±€ AutoLoad"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr "移动Autoload"
+msgstr "移动 Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr "移除Autoload"
+msgstr "移除 Autoload"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
@@ -1518,15 +1524,15 @@ msgstr "å¯ç”¨"
#: editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr "é‡æŽ’åºAutoload"
+msgstr "é‡æŽ’åº Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Can't add autoload:"
-msgstr "无法加载autoload:"
+msgstr "无法加载 Autoload:"
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr "添加自动加载"
+msgstr "添加 Autoload"
#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp
@@ -1559,11 +1565,11 @@ msgstr "更新场景"
#: editor/editor_data.cpp
msgid "Storing local changes..."
-msgstr "ä¿å­˜ä¿®æ”¹ä¸­..."
+msgstr "ä¿å­˜æœ¬åœ°æ›´æ”¹..."
#: editor/editor_data.cpp
msgid "Updating scene..."
-msgstr "更新场景中..."
+msgstr "更新场景..."
#: editor/editor_data.cpp editor/editor_properties.cpp
msgid "[empty]"
@@ -1575,7 +1581,7 @@ msgstr "[未ä¿å­˜]"
#: editor/editor_dir_dialog.cpp
msgid "Please select a base directory first."
-msgstr "请先选择一个目录。"
+msgstr "请先选择一个基础目录。"
#: editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1585,7 +1591,7 @@ msgstr "选择目录"
#: editor/filesystem_dock.cpp editor/project_manager.cpp
#: scene/gui/file_dialog.cpp
msgid "Create Folder"
-msgstr "新建文件夹"
+msgstr "创建文件夹"
#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
@@ -1619,13 +1625,14 @@ msgstr "打包中"
msgid ""
"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
"Etc' in Project Settings."
-msgstr "目标平å°éœ€è¦GLES2的“ETCâ€çº¹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨â€œå¯¼å…¥Etcâ€ã€‚"
+msgstr "目标平å°éœ€è¦ GLES2 çš„ “ETC†纹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨ “Import Etcâ€ã€‚"
#: editor/editor_export.cpp
msgid ""
"Target platform requires 'ETC2' texture compression for GLES3. Enable "
"'Import Etc 2' in Project Settings."
-msgstr "目标平å°éœ€è¦GLES3的“ETC2â€çº¹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨â€œå¯¼å…¥Etc 2â€ã€‚"
+msgstr ""
+"目标平å°éœ€è¦ GLES3 çš„ “ETC2†纹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨ “Import Etc 2â€ã€‚"
#: editor/editor_export.cpp
msgid ""
@@ -1634,33 +1641,33 @@ msgid ""
"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"目标平å°éœ€è¦â€œETCâ€çº¹ç†åŽ‹ç¼©ï¼Œä»¥ä¾¿é©±åŠ¨ç¨‹åºå›žé€€åˆ°GLES2。\n"
-"在项目设置中å¯ç”¨â€œå¯¼å…¥Etcâ€ï¼Œæˆ–ç¦ç”¨â€œå¯ç”¨é©±åŠ¨ç¨‹åºå›žé€€â€ã€‚"
+"目标平å°éœ€è¦ “ETC†纹ç†åŽ‹ç¼©ï¼Œä»¥ä¾¿é©±åŠ¨ç¨‹åºå›žé€€åˆ° GLES2。\n"
+"在项目设置中å¯ç”¨ “Import Etcâ€ï¼Œæˆ–ç¦ç”¨ “Driver Fallback Enabledâ€ã€‚"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
-msgstr "目标平å°éœ€è¦GLES2的“ETCâ€çº¹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨â€œå¯¼å…¥Etcâ€ã€‚"
+msgstr ""
+"目标平å°éœ€è¦ GLES2 çš„ “PVRTC†纹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨ “Import Pvrtcâ€ã€‚"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
-msgstr "目标平å°éœ€è¦GLES3的“ETC2â€çº¹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨â€œå¯¼å…¥Etc 2â€ã€‚"
+msgstr ""
+"目标平å°éœ€è¦ GLES3 çš„ “ETC2†或 “PVRTC†纹ç†åŽ‹ç¼©ã€‚在项目设置中å¯ç”¨ “Import "
+"Etc 2†或 “Import Pvrtcâ€ã€‚"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"目标平å°éœ€è¦â€œETCâ€çº¹ç†åŽ‹ç¼©ï¼Œä»¥ä¾¿é©±åŠ¨ç¨‹åºå›žé€€åˆ°GLES2。\n"
-"在项目设置中å¯ç”¨â€œå¯¼å…¥Etcâ€ï¼Œæˆ–ç¦ç”¨â€œå¯ç”¨é©±åŠ¨ç¨‹åºå›žé€€â€ã€‚"
+"目标平å°éœ€è¦ “PVRTC†纹ç†åŽ‹ç¼©ï¼Œä»¥ä¾¿é©±åŠ¨ç¨‹åºå›žé€€åˆ° GLES2。\n"
+"在项目设置中å¯ç”¨ “Import Pvrtcâ€ï¼Œæˆ–ç¦ç”¨ “Driver Fallback Enabledâ€ã€‚"
#: editor/editor_export.cpp platform/android/export/export.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -1680,11 +1687,11 @@ msgstr "找ä¸åˆ°æ¨¡æ¿æ–‡ä»¶ï¼š"
#: editor/editor_export.cpp
msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
-msgstr "以32ä½å¹³å°å¯¼å‡ºæ—¶ï¼Œå†…嵌的PCKä¸èƒ½å¤§äºŽ4GB。"
+msgstr "以 32 ä½å¹³å°å¯¼å‡ºæ—¶ï¼Œå†…嵌的 PCK ä¸èƒ½å¤§äºŽ 4GB。"
#: editor/editor_feature_profile.cpp
msgid "3D Editor"
-msgstr "3D编辑器"
+msgstr "3D 编辑器"
#: editor/editor_feature_profile.cpp
msgid "Script Editor"
@@ -1712,11 +1719,11 @@ msgstr "导入é¢æ¿"
#: editor/editor_feature_profile.cpp
msgid "Erase profile '%s'? (no undo)"
-msgstr "是å¦åˆ é™¤é…置文件“%sâ€ï¼Ÿï¼ˆæ— æ³•æ’¤é”€ï¼‰"
+msgstr "是å¦åˆ é™¤é…置文件 “%sâ€ï¼Ÿï¼ˆæ— æ³•æ’¤é”€ï¼‰"
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
-msgstr "é…置文件必须是有效的文件å,并且ä¸èƒ½åŒ…å«â€œ.â€"
+msgstr "é…置文件必须是有效的文件å,并且ä¸èƒ½åŒ…å« â€œ.â€"
#: editor/editor_feature_profile.cpp
msgid "Profile with this name already exists."
@@ -1756,17 +1763,17 @@ msgstr "å¯ç”¨çš„类:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
-msgstr "文件“%sâ€çš„æ ¼å¼æ— æ•ˆï¼Œå¯¼å…¥ä¸­æ­¢ã€‚"
+msgstr "文件 “%s†的格å¼æ— æ•ˆï¼Œå¯¼å…¥ä¸­æ­¢ã€‚"
#: editor/editor_feature_profile.cpp
msgid ""
"Profile '%s' already exists. Remove it first before importing, import "
"aborted."
-msgstr "é…置文件“%sâ€å·²å­˜åœ¨ã€‚在导入之å‰å…ˆåˆ é™¤å®ƒï¼Œå¯¼å…¥å·²ä¸­æ­¢ã€‚"
+msgstr "é…置文件 “%s†已存在。在导入之å‰å…ˆåˆ é™¤è¯¥é…置文件,导入已中止。"
#: editor/editor_feature_profile.cpp
msgid "Error saving profile to path: '%s'."
-msgstr "å°†é…置文件ä¿å­˜åˆ°è·¯å¾„“%sâ€æ—¶å‡ºé”™ã€‚"
+msgstr "å°†é…置文件ä¿å­˜åˆ°è·¯å¾„ “%s†时出错。"
#: editor/editor_feature_profile.cpp
msgid "Unset"
@@ -1774,7 +1781,7 @@ msgstr "未设置"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
-msgstr "当å‰é…置文件:"
+msgstr "当å‰é…置文件:"
#: editor/editor_feature_profile.cpp
msgid "Make Current"
@@ -1813,7 +1820,7 @@ msgstr "删除é…置文件"
#: editor/editor_feature_profile.cpp
msgid "Godot Feature Profile"
-msgstr "Godot功能é…置文件"
+msgstr "Godot 功能é…置文件"
#: editor/editor_feature_profile.cpp
msgid "Import Profile(s)"
@@ -1867,11 +1874,11 @@ msgstr "所有å¯ç”¨ç±»åž‹"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "All Files (*)"
-msgstr "所有文件(*)"
+msgstr "所有文件 (*)"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr "打开å•ä¸ªæ–‡ä»¶"
+msgstr "打开文件"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Open File(s)"
@@ -1950,7 +1957,7 @@ msgstr "刷新文件。"
#: editor/editor_file_dialog.cpp
msgid "(Un)favorite current folder."
-msgstr "(å–消)收è—当å‰æ–‡ä»¶å¤¹ã€‚"
+msgstr "收è—ï¼å–消收è—当å‰æ–‡ä»¶å¤¹ã€‚"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Toggle the visibility of hidden files."
@@ -1958,11 +1965,11 @@ msgstr "切æ¢éšè—文件的å¯è§æ€§ã€‚"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a grid of thumbnails."
-msgstr "以网格缩略图形å¼æŸ¥çœ‹æ‰€æœ‰é¡¹ã€‚"
+msgstr "以网格缩略图查看项目。"
#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
msgid "View items as a list."
-msgstr "以列表的形å¼æŸ¥çœ‹æ‰€æœ‰é¡¹ã€‚"
+msgstr "以列表查看项目。"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Directories & Files:"
@@ -1990,11 +1997,11 @@ msgstr "扫ææºæ–‡ä»¶"
msgid ""
"There are multiple importers for different types pointing to file %s, import "
"aborted"
-msgstr "ä¸åŒç±»åž‹çš„%s 文件存在多ç§å¯¼å…¥æ–¹å¼ï¼Œè‡ªåŠ¨å¯¼å…¥å¤±è´¥"
+msgstr "文件 %s 有ä¸åŒç±»åž‹çš„多个导入器,已中止导入"
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
-msgstr "正在(é‡æ–°ï¼‰å¯¼å…¥ç´ æ"
+msgstr "正在导入或é‡æ–°å¯¼å…¥ç´ æ"
#: editor/editor_help.cpp editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
@@ -2192,7 +2199,7 @@ msgstr "开始"
#: editor/editor_network_profiler.cpp
msgid "%s/s"
-msgstr "%s/s"
+msgstr "%s/秒"
#: editor/editor_network_profiler.cpp
msgid "Down"
@@ -2208,23 +2215,23 @@ msgstr "节点"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
-msgstr "ä¼ å…¥RPC"
+msgstr "ä¼ å…¥ RPC"
#: editor/editor_network_profiler.cpp
msgid "Incoming RSET"
-msgstr "ä¼ å…¥RSET"
+msgstr "ä¼ å…¥ RSET"
#: editor/editor_network_profiler.cpp
msgid "Outgoing RPC"
-msgstr "传出RPC"
+msgstr "传出 RPC"
#: editor/editor_network_profiler.cpp
msgid "Outgoing RSET"
-msgstr "传出RSET"
+msgstr "传出 RSET"
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "New Window"
-msgstr "新建窗å£"
+msgstr "新窗å£"
#: editor/editor_node.cpp
msgid "Imported resources can't be saved."
@@ -2233,7 +2240,7 @@ msgstr "导入的资æºæ— æ³•ä¿å­˜ã€‚"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
#: scene/gui/dialogs.cpp
msgid "OK"
-msgstr "确定"
+msgstr "好"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Error saving resource!"
@@ -2243,7 +2250,7 @@ msgstr "ä¿å­˜èµ„æºå‡ºé”™ï¼"
msgid ""
"This resource can't be saved because it does not belong to the edited scene. "
"Make it unique first."
-msgstr "无法ä¿å­˜æ­¤èµ„æºï¼Œå› ä¸ºå®ƒä¸å±žäºŽå·²ç¼–辑的场景。首先使它唯一化。"
+msgstr "无法ä¿å­˜æ­¤èµ„æºï¼Œå› ä¸ºæ­¤èµ„æºä¸å±žäºŽå·²ç¼–辑的场景。请先唯一化此资æºã€‚"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Save Resource As..."
@@ -2255,7 +2262,7 @@ msgstr "无法以å¯å†™æ¨¡å¼æ‰“开文件:"
#: editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr "未知的文件类型请求:"
+msgstr "请求文件的类型未知:"
#: editor/editor_node.cpp
msgid "Error while saving."
@@ -2263,23 +2270,23 @@ msgstr "ä¿å­˜å‡ºé”™ã€‚"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Can't open '%s'. The file could have been moved or deleted."
-msgstr "无法打开“%sâ€ã€‚文件å¯èƒ½å·²è¢«ç§»åŠ¨æˆ–删除。"
+msgstr "无法打开 “%sâ€ã€‚文件å¯èƒ½å·²è¢«ç§»åŠ¨æˆ–删除。"
#: editor/editor_node.cpp
msgid "Error while parsing '%s'."
-msgstr "解æžâ€œ%sâ€æ—¶å‡ºé”™ã€‚"
+msgstr "è§£æž â€œ%s†时出错。"
#: editor/editor_node.cpp
msgid "Unexpected end of file '%s'."
-msgstr "文件“%sâ€æ„外结æŸã€‚"
+msgstr "文件 “%s†æ„外结æŸã€‚"
#: editor/editor_node.cpp
msgid "Missing '%s' or its dependencies."
-msgstr "“%sâ€æˆ–å…¶ä¾èµ–项缺失。"
+msgstr "“%s†或其ä¾èµ–项缺失。"
#: editor/editor_node.cpp
msgid "Error while loading '%s'."
-msgstr "加载“%sâ€æ—¶å‡ºé”™ã€‚"
+msgstr "加载 “%s†时出错。"
#: editor/editor_node.cpp
msgid "Saving Scene"
@@ -2302,18 +2309,18 @@ msgid ""
"This scene can't be saved because there is a cyclic instancing inclusion.\n"
"Please resolve it and then attempt to save again."
msgstr ""
-"无法ä¿å­˜æ­¤åœºæ™¯ï¼Œå› ä¸ºåŒ…å«å¾ªçŽ¯å®žä¾‹åŒ–。\n"
-"请解决它,然åŽå°è¯•å†æ¬¡ä¿å­˜ã€‚"
+"场景包å«å¾ªçŽ¯å®žä¾‹åŒ–,无法ä¿å­˜ã€‚\n"
+"请解决此问题åŽå°è¯•å†æ¬¡ä¿å­˜ã€‚"
#: editor/editor_node.cpp
msgid ""
"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't "
"be satisfied."
-msgstr "无法ä¿å­˜åœºæ™¯ï¼Œä¾èµ–项(实例或基类)验è¯å¤±è´¥ã€‚"
+msgstr "无法ä¿å­˜åœºæ™¯ã€‚å¯èƒ½æ˜¯å› ä¸ºä¾èµ–项(实例或继承)无法满足。"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "Can't overwrite scene that is still open!"
-msgstr "无法覆盖ä»å¤„于打开状æ€çš„场景!"
+msgstr "无法覆盖ä»å¤„于打开状æ€çš„场景ï¼"
#: editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
@@ -2332,19 +2339,25 @@ msgid "Error saving TileSet!"
msgstr "ä¿å­˜å›¾å—集时出错ï¼"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "ä¿å­˜å¸ƒå±€å‡ºé”™ï¼"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "覆盖编辑器默认布局。"
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "布局å称未找到ï¼"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "é‡ç½®ä¸ºé»˜è®¤å¸ƒå±€è®¾ç½®ã€‚"
#: editor/editor_node.cpp
@@ -2353,8 +2366,8 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"此资æºå±žäºŽå·²å¯¼å…¥çš„场景, 因此它ä¸å¯ç¼–辑。\n"
-"请阅读与导入场景相关的文档, 以便更好地ç†è§£æ­¤å·¥ä½œæµã€‚"
+"此资æºå±žäºŽå·²å¯¼å…¥çš„场景,ä¸å¯ç¼–辑。\n"
+"请阅读与导入场景相关的文档,以更佳ç†è§£æ­¤å·¥ä½œæµã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -2362,13 +2375,13 @@ msgid ""
"Changes to it won't be kept when saving the current scene."
msgstr ""
"这个资æºå±žäºŽå®žä¾‹æˆ–继承的场景。\n"
-"ä¿å­˜å½“å‰åœºæ™¯æ—¶ä¸ä¼šä¿ç•™å¯¹å®ƒçš„更改。"
+"ä¿å­˜å½“å‰åœºæ™¯æ—¶ä¸ä¼šä¿ç•™æ›´æ”¹ã€‚"
#: editor/editor_node.cpp
msgid ""
"This resource was imported, so it's not editable. Change its settings in the "
"import panel and then re-import."
-msgstr "此资æºå·²å¯¼å…¥ï¼Œå› æ­¤æ— æ³•ç¼–辑。在“导入â€é¢æ¿ä¸­æ›´æ”¹è®¾ç½®ï¼Œç„¶åŽé‡æ–°å¯¼å…¥ã€‚"
+msgstr "此资æºå·²å¯¼å…¥ï¼Œå› æ­¤æ— æ³•ç¼–辑。在导入é¢æ¿ä¸­æ›´æ”¹è®¾ç½®å¹¶é‡æ–°å¯¼å…¥ã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -2377,9 +2390,9 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
-"场景已被导入, 对它的更改将ä¸ä¼šä¿ç•™ã€‚\n"
-"对其进行实例化或继承将å…许对其进行更改。\n"
-"请阅读与导入场景相关的文档, 以便更好地ç†è§£æ­¤å·¥ä½œæµã€‚"
+"场景已被导入,所åšçš„更改将ä¸ä¼šä¿ç•™ã€‚\n"
+"请实例化或继承该场景以å…许对其进行更改。\n"
+"请阅读与导入场景相关的文档,以更佳ç†è§£æ­¤å·¥ä½œæµã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -2388,11 +2401,11 @@ msgid ""
"this workflow."
msgstr ""
"这是远程对象,因此ä¸ä¼šä¿ç•™å¯¹å…¶çš„更改。\n"
-"请阅读与调试相关的文档,以更好地了解此工作æµç¨‹ã€‚"
+"请阅读与调试相关的文档,以更佳ç†è§£æ­¤å·¥ä½œæµã€‚"
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
-msgstr "没有设置è¦æ‰§è¡Œçš„场景。"
+msgstr "没有设置è¦è¿è¡Œçš„场景。"
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
@@ -2424,7 +2437,7 @@ msgstr "ä¿å­˜å¹¶å…³é—­"
#: editor/editor_node.cpp
msgid "Save changes to '%s' before closing?"
-msgstr "是å¦åœ¨å…³é—­å‰ä¿å­˜å¯¹â€œ%sâ€çš„更改?"
+msgstr "是å¦åœ¨å…³é—­å‰ä¿å­˜å¯¹ “%s†的更改?"
#: editor/editor_node.cpp
msgid "Saved %s modified resource(s)."
@@ -2432,7 +2445,7 @@ msgstr "å·²ä¿å­˜ %s 个修改åŽçš„资æºã€‚"
#: editor/editor_node.cpp
msgid "A root node is required to save the scene."
-msgstr "ä¿å­˜åœºæ™¯éœ€è¦æ ¹èŠ‚点。"
+msgstr "必须有根节点æ‰å¯ä¿å­˜åœºæ™¯ã€‚"
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2452,7 +2465,7 @@ msgstr "此场景尚未ä¿å­˜ã€‚是å¦åœ¨è¿è¡Œå‰ä¿å­˜ï¼Ÿ"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr "æ­¤æ“作必须在打开一个场景åŽæ‰èƒ½æ‰§è¡Œã€‚"
+msgstr "必须先打开一个场景æ‰èƒ½å®Œæˆæ­¤æ“作。"
#: editor/editor_node.cpp
msgid "Export Mesh Library"
@@ -2460,7 +2473,7 @@ msgstr "导出网格库"
#: editor/editor_node.cpp
msgid "This operation can't be done without a root node."
-msgstr "需è¦æœ‰æ ¹èŠ‚点æ‰èƒ½å®Œæˆæ­¤æ“作。"
+msgstr "必须有根节点æ‰èƒ½å®Œæˆæ­¤æ“作。"
#: editor/editor_node.cpp
msgid "Export Tile Set"
@@ -2468,7 +2481,7 @@ msgstr "导出图å—集"
#: editor/editor_node.cpp
msgid "This operation can't be done without a selected node."
-msgstr "æ­¤æ“作必须先选择一个节点æ‰èƒ½æ‰§è¡Œã€‚"
+msgstr "必须先选择节点æ‰èƒ½å®Œæˆæ­¤æ“作。"
#: editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -2476,7 +2489,7 @@ msgstr "当å‰åœºæ™¯å°šæœªä¿å­˜ã€‚是å¦ä»è¦æ‰“开?"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr "无法é‡æ–°åŠ è½½æœªä¿å­˜çš„场景。"
+msgstr "无法é‡æ–°åŠ è½½ä»Žæœªä¿å­˜è¿‡çš„场景。"
#: editor/editor_node.cpp
msgid "Reload Saved Scene"
@@ -2512,17 +2525,17 @@ msgstr "ä¿å­˜åŽé€€å‡º"
#: editor/editor_node.cpp
msgid "Save changes to the following scene(s) before quitting?"
-msgstr "以下场景在退出å‰ä¿å­˜æ›´æ”¹å—?"
+msgstr "退出å‰è¦ä¿å­˜ä»¥ä¸‹åœºæ™¯æ›´æ”¹å—?"
#: editor/editor_node.cpp
msgid "Save changes the following scene(s) before opening Project Manager?"
-msgstr "在打开项目管ç†å™¨ä¹‹å‰ä¿å­˜æ›´æ”¹å—?"
+msgstr "打开项目管ç†å™¨å‰è¦ä¿å­˜ä¸‹åˆ—场景更改å—?"
#: editor/editor_node.cpp
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
-msgstr "该选项已废弃。必须强制刷新的情况现在被视为 bug。请报告。"
+msgstr "该选项已废弃。必须强制刷新的情况现在被视为 Bug,请报告。"
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -2538,37 +2551,37 @@ msgstr "é‡æ–°æ‰“开关闭的场景"
#: editor/editor_node.cpp
msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
-msgstr "无法在“%sâ€ä¸Šå¯ç”¨åŠ è½½é¡¹æ’件:é…置解æžå¤±è´¥ã€‚"
+msgstr "无法在 “%s†上å¯ç”¨åŠ è½½é¡¹æ’件:é…置解æžå¤±è´¥ã€‚"
#: editor/editor_node.cpp
msgid "Unable to find script field for addon plugin at: 'res://addons/%s'."
-msgstr "无法在“res://addons/%sâ€ä¸­æ‰¾åˆ°æ’件的脚本字段。"
+msgstr "无法在 “res://addons/%s†中找到加载项æ’件的脚本字段。"
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s'."
-msgstr "无法从路径中加载æ’件脚本:“%sâ€ã€‚"
+msgstr "无法从路径 “%s†中加载加载项脚本。"
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' There seems to be an error in "
"the code, please check the syntax."
-msgstr "无法从路径加载æ’件脚本:“%sâ€è„šæœ¬çœ‹ä¸ŠåŽ»ä¼¼ä¹Žæœ‰ä»£ç é”™è¯¯ï¼Œè¯·æ£€æŸ¥å…¶è¯­æ³•ã€‚"
+msgstr "无法从路径 “%s†加载加载项脚本:脚本似乎有代ç é”™è¯¯ï¼Œè¯·æ£€æŸ¥å…¶è¯­æ³•ã€‚"
#: editor/editor_node.cpp
msgid ""
"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
-msgstr "无法从路径加载æ’件脚本:“%sâ€åŸºç±»åž‹ä¸æ˜¯ EditorPlugin。"
+msgstr "无法从路径 “%s†加载加载项脚本:基类型ä¸æ˜¯ EditorPlugin。"
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
-msgstr "无法从路径加载æ’件脚本:“%sâ€è„šæœ¬ä¸åœ¨å·¥å…·æ¨¡å¼ä¸‹ã€‚"
+msgstr "无法从路径 “%s†加载æ’件脚本:脚本ä¸åœ¨å·¥å…·æ¨¡å¼ä¸‹ã€‚"
#: editor/editor_node.cpp
msgid ""
"Scene '%s' was automatically imported, so it can't be modified.\n"
"To make changes to it, a new inherited scene can be created."
msgstr ""
-"场景“%sâ€æ˜¯è‡ªåŠ¨å¯¼å…¥çš„,因此无法修改。\n"
+"场景 “%s†是自动导入的,因此无法修改。\n"
"è‹¥è¦å¯¹å…¶è¿›è¡Œæ›´æ”¹ï¼Œå¯ä»¥æ–°å»ºç»§æ‰¿åœºæ™¯ã€‚"
#: editor/editor_node.cpp
@@ -2576,12 +2589,12 @@ msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
-"加载场景出错,场景必须放在项目目录下。请å°è¯•ä½¿ç”¨â€œå¯¼å…¥â€æ‰“开该场景,然åŽå†åœ¨é¡¹"
-"目目录下ä¿å­˜ã€‚"
+"加载场景出错,场景必须放在项目目录下。请å°è¯•ä½¿ç”¨ “导入†打开该场景,然åŽå†ä¿"
+"存到项目目录下。"
#: editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr "场景“%sâ€çš„ä¾èµ–已被破å:"
+msgstr "场景 “%s†的ä¾èµ–已被破å:"
#: editor/editor_node.cpp
msgid "Clear Recent Scenes"
@@ -2594,7 +2607,7 @@ msgid ""
"category."
msgstr ""
"尚未定义主场景,是å¦é€‰æ‹©ä¸€ä¸ªï¼Ÿ\n"
-"ä½ å¯ä»¥ç¨åŽåœ¨â€œé¡¹ç›®è®¾ç½®â€çš„“applicationâ€åˆ†ç±»ä¸‹ä¿®æ”¹ã€‚"
+"ç¨åŽä¹Ÿå¯åœ¨ “项目设置†的 “application†分类下修改。"
#: editor/editor_node.cpp
msgid ""
@@ -2602,8 +2615,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"所选场景“%sâ€ä¸å­˜åœ¨ï¼Œæ˜¯å¦é€‰æ‹©æœ‰æ•ˆçš„场景?\n"
-"请在“项目设置â€çš„“applicationâ€åˆ†ç±»ä¸‹è®¾ç½®é€‰æ‹©ä¸»åœºæ™¯ã€‚"
+"所选场景 “%s†ä¸å­˜åœ¨ï¼Œæ˜¯å¦é€‰æ‹©æœ‰æ•ˆçš„场景?\n"
+"ç¨åŽä¹Ÿå¯åœ¨ “项目设置†的 “application†分类下设置主场景。"
#: editor/editor_node.cpp
msgid ""
@@ -2611,8 +2624,8 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
-"选中的“%sâ€åœºæ™¯å¹¶éžåœºæ™¯æ–‡ä»¶ï¼Œè¯·é€‰æ‹©æœ‰æ•ˆçš„场景。\n"
-"ä½ å¯ä»¥åœ¨â€œé¡¹ç›®è®¾ç½®â€çš„“applicationâ€åˆ†ç±»ä¸‹æ›´æ¢ä¸»åœºæ™¯ã€‚"
+"选中的 “%s†场景并éžåœºæ™¯æ–‡ä»¶ï¼Œè¯·é€‰æ‹©æœ‰æ•ˆçš„场景。\n"
+"ç¨åŽä¹Ÿå¯åœ¨ “项目设置†的 “application†分类下更æ¢ä¸»åœºæ™¯ã€‚"
#: editor/editor_node.cpp
msgid "Save Layout"
@@ -2638,31 +2651,31 @@ msgstr "è¿è¡Œæ­¤åœºæ™¯"
#: editor/editor_node.cpp
msgid "Close Tab"
-msgstr "关闭标签页"
+msgstr "关闭选项å¡"
#: editor/editor_node.cpp
msgid "Undo Close Tab"
-msgstr "撤销关闭标签页"
+msgstr "撤销关闭选项å¡"
#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
msgid "Close Other Tabs"
-msgstr "关闭其他标签页"
+msgstr "关闭其他选项å¡"
#: editor/editor_node.cpp
msgid "Close Tabs to the Right"
-msgstr "关闭å³ä¾§æ ‡ç­¾é¡µ"
+msgstr "关闭å³ä¾§é€‰é¡¹å¡"
#: editor/editor_node.cpp
msgid "Close All Tabs"
-msgstr "关闭全部标签"
+msgstr "关闭全部选项å¡"
#: editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr "切æ¢åœºæ™¯æ ‡ç­¾é¡µ"
+msgstr "切æ¢åœºæ™¯é€‰é¡¹å¡"
#: editor/editor_node.cpp
msgid "%d more files or folders"
-msgstr "其它 %d 个文件或文件夹"
+msgstr "其它 %d 个文件和文件夹"
#: editor/editor_node.cpp
msgid "%d more folders"
@@ -2682,7 +2695,7 @@ msgstr "专注模å¼"
#: editor/editor_node.cpp
msgid "Toggle distraction-free mode."
-msgstr "切æ¢ä¸“注模å¼ã€‚"
+msgstr "进入ï¼ç¦»å¼€ä¸“注模å¼ã€‚"
#: editor/editor_node.cpp
msgid "Add a new scene."
@@ -2694,7 +2707,7 @@ msgstr "场景"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
-msgstr "å‰å¾€ä¸Šä¸€ä¸ªæ‰“开的场景。"
+msgstr "转到上一个打开的场景。"
#: editor/editor_node.cpp
msgid "Copy Text"
@@ -2702,11 +2715,11 @@ msgstr "å¤åˆ¶æ–‡æœ¬"
#: editor/editor_node.cpp
msgid "Next tab"
-msgstr "下一标签"
+msgstr "下一个选项å¡"
#: editor/editor_node.cpp
msgid "Previous tab"
-msgstr "上一标签"
+msgstr "上一个选项å¡"
#: editor/editor_node.cpp
msgid "Filter Files..."
@@ -2829,10 +2842,10 @@ msgid ""
"mobile device).\n"
"You don't need to enable it to use the GDScript debugger locally."
msgstr ""
-"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œä¸€é”®éƒ¨ç½²åŽçš„å¯æ‰§è¡Œæ–‡ä»¶å°†å°è¯•è¿žæŽ¥åˆ°è¿™å°ç”µè„‘çš„IP以便调试所è¿è¡Œçš„"
-"工程。\n"
-"该选项æ„在进行远程调试(尤其是移动设备)。\n"
-"在本地使用GDScript调试器无需å¯ç”¨ã€‚"
+"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œä¸€é”®éƒ¨ç½²åŽçš„å¯æ‰§è¡Œæ–‡ä»¶å°†å°è¯•è¿žæŽ¥åˆ°è¿™å°ç”µè„‘çš„ IP 以便调试所è¿è¡Œ"
+"的项目。\n"
+"该选项用于进行远程调试(尤其是移动设备)。\n"
+"在本地使用 GDScript 调试器时无需å¯ç”¨ã€‚"
#: editor/editor_node.cpp
msgid "Small Deploy with Network Filesystem"
@@ -2847,10 +2860,10 @@ msgid ""
"On Android, deploying will use the USB cable for faster performance. This "
"option speeds up testing for projects with large assets."
msgstr ""
-"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œä¸€é”®éƒ¨ç½²åˆ°Android时所导出的å¯æ‰§è¡Œæ–‡ä»¶å°†ä¸åŒ…å«å·¥ç¨‹æ•°æ®ã€‚\n"
-"文件系统将由编辑器基于工程通过网络æ供。\n"
-"在Androidå¹³å°ï¼Œéƒ¨ç½²å°†é€šè¿‡USB线缆进行以æ高性能。如果工程中包å«è¾ƒå¤§çš„ç´ æ,该"
-"选项会æ高测试速度。"
+"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œä¸€é”®éƒ¨ç½²åˆ° Android 时所导出的å¯æ‰§è¡Œæ–‡ä»¶å°†ä¸åŒ…å«é¡¹ç›®æ•°æ®ã€‚\n"
+"文件系统将由编辑器基于项目通过网络æ供。\n"
+"在 Android å¹³å°ï¼Œéƒ¨ç½²å°†é€šè¿‡ USB 线缆进行以æ高性能。如果项目中包å«è¾ƒå¤§çš„ç´ "
+"æ,该选项å¯æ高测试速度。"
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
@@ -2860,7 +2873,7 @@ msgstr "显示碰撞区域"
msgid ""
"When this option is enabled, collision shapes and raycast nodes (for 2D and "
"3D) will be visible in the running project."
-msgstr "å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œç¢°æ’žåŒºåŸŸå’Œå…‰çº¿æŠ•å°„节点(2Då’Œ3D)将在工程è¿è¡Œæ—¶å¯è§ã€‚"
+msgstr "å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œç¢°æ’žåŒºåŸŸå’Œå…‰çº¿æŠ•å°„节点(2D å’Œ 3D)将在项目è¿è¡Œæ—¶å¯è§ã€‚"
#: editor/editor_node.cpp
msgid "Visible Navigation"
@@ -2870,7 +2883,7 @@ msgstr "显示导航"
msgid ""
"When this option is enabled, navigation meshes and polygons will be visible "
"in the running project."
-msgstr "å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œå¯¼èˆªç½‘格和多边形将在工程è¿è¡Œæ—¶å¯è§ã€‚"
+msgstr "å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œå¯¼èˆªç½‘格和多边形将在项目è¿è¡Œæ—¶å¯è§ã€‚"
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
@@ -2883,7 +2896,7 @@ msgid ""
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œåœ¨ç¼–辑器中对场景的任何修改都会被应用于正在è¿è¡Œçš„工程中。\n"
+"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œåœ¨ç¼–辑器中对场景的任何修改都会被应用于正在è¿è¡Œçš„项目中。\n"
"当使用于远程设备时,å¯ç”¨ç½‘络文件系统能æ高编辑效率。"
#: editor/editor_node.cpp
@@ -2897,7 +2910,7 @@ msgid ""
"When used remotely on a device, this is more efficient when the network "
"filesystem option is enabled."
msgstr ""
-"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œä¿å­˜çš„任何脚本都会被正在è¿è¡Œçš„工程é‡æ–°åŠ è½½ã€‚\n"
+"å¯ç”¨è¯¥é€‰é¡¹æ—¶ï¼Œä»»ä½•ä¿å­˜çš„脚本都会被正在è¿è¡Œçš„项目é‡æ–°åŠ è½½ã€‚\n"
"当使用于远程设备时,å¯ç”¨ç½‘络文件系统能æ高编辑效率。"
#: editor/editor_node.cpp editor/script_create_dialog.cpp
@@ -2918,27 +2931,27 @@ msgstr "截å±"
#: editor/editor_node.cpp
msgid "Screenshots are stored in the Editor Data/Settings Folder."
-msgstr "截图将ä¿å­˜åœ¨ç¼–辑器数æ®/设置文件夹中。"
+msgstr "截图将ä¿å­˜åœ¨ç¼–辑器数æ®æˆ–设置文件夹中。"
#: editor/editor_node.cpp
msgid "Toggle Fullscreen"
-msgstr "å…¨å±æ¨¡å¼"
+msgstr "进入ï¼ç¦»å¼€å…¨å±æ¨¡å¼"
#: editor/editor_node.cpp
msgid "Toggle System Console"
-msgstr "系统命令行模å¼"
+msgstr "打开ï¼å…³é—­ç³»ç»Ÿå‘½ä»¤è¡Œ"
#: editor/editor_node.cpp
msgid "Open Editor Data/Settings Folder"
-msgstr "打开“编辑器数æ®/设置â€æ–‡ä»¶å¤¹"
+msgstr "打开 “编辑器数æ®/设置†文件夹"
#: editor/editor_node.cpp
msgid "Open Editor Data Folder"
-msgstr "打开编辑器数æ®æ–‡ä»¶å¤¹"
+msgstr "打开 “编辑器数æ®â€ 文件夹"
#: editor/editor_node.cpp
msgid "Open Editor Settings Folder"
-msgstr "打开“编辑器设置â€æ–‡ä»¶å¤¹"
+msgstr "打开 “编辑器设置†文件夹"
#: editor/editor_node.cpp
msgid "Manage Editor Features..."
@@ -2995,7 +3008,7 @@ msgstr "è¿è¡Œ"
#: editor/editor_node.cpp
msgid "Pause the scene execution for debugging."
-msgstr "æš‚åœè¿è¡Œåœºæ™¯ï¼Œä»¥ä¾¿è¿›è¡Œè°ƒè¯•ã€‚"
+msgstr "æš‚åœè¿è¡Œåœºæ™¯ä»¥è¿›è¡Œè°ƒè¯•ã€‚"
#: editor/editor_node.cpp
msgid "Pause Scene"
@@ -3052,7 +3065,7 @@ msgstr "文件系统"
#: editor/editor_node.cpp
msgid "Inspector"
-msgstr "属性"
+msgstr "属性检查器"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
@@ -3084,11 +3097,12 @@ msgid ""
"the \"Use Custom Build\" option should be enabled in the Android export "
"preset."
msgstr ""
-"通过将æºæ¨¡æ¿å®‰è£…到“res://android/buildâ€ï¼Œå°†ä¸ºè‡ªå®šä¹‰Android构建设置项目。\n"
-"然åŽï¼Œæ‚¨å¯ä»¥åº”用修改并在导出时构建自己的自定义APK(添加模å—,更改"
-"AndroidManifest.xml等)。\n"
-"请注æ„,为了进行自定义构建而ä¸æ˜¯ä½¿ç”¨é¢„先构建的APK,应在Android导出预设中å¯"
-"用“使用自定义构建â€é€‰é¡¹ã€‚"
+"通过将æºæ¨¡æ¿å®‰è£…到 “res://android/build†,将为自定义 Android 构建设置项"
+"目。\n"
+"然åŽï¼Œå¯ä»¥åº”用修改并在导出时构建自己的自定义 APK(添加模å—ã€æ›´æ”¹ "
+"AndroidManifest.xml 等)。\n"
+"请注æ„,è¦ä½¿ç”¨è‡ªå®šä¹‰æž„建而ä¸æ˜¯ä½¿ç”¨é¢„先构建的APK,需在 Android 导出预设中å¯ç”¨ "
+"“使用自定义构建†选项。"
#: editor/editor_node.cpp
msgid ""
@@ -3097,12 +3111,12 @@ msgid ""
"Remove the \"res://android/build\" directory manually before attempting this "
"operation again."
msgstr ""
-"Android构建模æ¿å·²å®‰è£…在此项目中,并且ä¸ä¼šè¢«è¦†ç›–。\n"
-"å†æ¬¡å°è¯•æ‰§è¡Œæ­¤æ“作之å‰ï¼Œè¯·æ‰‹åŠ¨åˆ é™¤â€œres://android/buildâ€ç›®å½•ã€‚"
+"Android 构建模æ¿å·²å®‰è£…在此项目中,将ä¸ä¼šè¢«è¦†ç›–。\n"
+"å†æ¬¡å°è¯•æ‰§è¡Œæ­¤æ“作之å‰ï¼Œè¯·æ‰‹åŠ¨åˆ é™¤ “res://android/build†目录。"
#: editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr "从ZIP文件中导入模æ¿"
+msgstr "从 ZIP 文件中导入模æ¿"
#: editor/editor_node.cpp
msgid "Template Package"
@@ -3134,11 +3148,11 @@ msgstr "选择"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
-msgstr "打开2D编辑器"
+msgstr "打开 2D 编辑器"
#: editor/editor_node.cpp
msgid "Open 3D Editor"
-msgstr "打开3D编辑器"
+msgstr "打开 3D 编辑器"
#: editor/editor_node.cpp
msgid "Open Script Editor"
@@ -3182,7 +3196,7 @@ msgstr "编辑æ’件"
#: editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr "已安装æ’件:"
+msgstr "已安装æ’件:"
#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
msgid "Update"
@@ -3227,15 +3241,15 @@ msgstr "物ç†å¸§ %"
#: editor/editor_profiler.cpp
msgid "Inclusive"
-msgstr "包å«"
+msgstr "全部"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr "自身"
+msgstr "仅自己"
#: editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr "帧å·ï¼š"
+msgstr "帧 #:"
#: editor/editor_profiler.cpp
msgid "Time"
@@ -3259,7 +3273,7 @@ msgstr "层"
#: editor/editor_properties.cpp
msgid "Bit %d, value %d"
-msgstr "第%dä½ï¼Œå€¼ä¸º%d"
+msgstr "第 %d ä½ï¼Œå€¼ä¸º %d"
#: editor/editor_properties.cpp
msgid "[Empty]"
@@ -3271,7 +3285,7 @@ msgstr "指定..."
#: editor/editor_properties.cpp
msgid "Invalid RID"
-msgstr "无效的RID"
+msgstr "无效的 RID"
#: editor/editor_properties.cpp
msgid ""
@@ -3284,7 +3298,7 @@ msgid ""
"Can't create a ViewportTexture on resources saved as a file.\n"
"Resource needs to belong to a scene."
msgstr ""
-"无法在ä¿å­˜ä¸ºæ–‡ä»¶çš„资æºä¸Šåˆ›å»ºè§†å›¾çº¹ç†ã€‚\n"
+"无法在ä¿å­˜ä¸ºæ–‡ä»¶çš„资æºä¸Šåˆ›å»º ViewportTexture。\n"
"资æºéœ€è¦å±žäºŽåœºæ™¯ã€‚"
#: editor/editor_properties.cpp
@@ -3294,8 +3308,8 @@ msgid ""
"Please switch on the 'local to scene' property on it (and all resources "
"containing it up to a node)."
msgstr ""
-"无法在此资æºä¸Šåˆ›å»ºè§†å›¾çº¹ç†ï¼Œå› ä¸ºå®ƒæœªè®¾ç½®ä¸ºæœ¬åœ°åˆ°åœºæ™¯ã€‚\n"
-"请打开上é¢çš„“本地到场景â€å±žæ€§ï¼ˆä»¥åŠåŒ…å«å®ƒçš„所有资æºåˆ°èŠ‚点)。"
+"无法在此资æºä¸Šåˆ›å»º ViewportTexture,因为这个资æºæœªè®¾ç½®å¯¹åº”的本地场景。\n"
+"请打开资æºä¸Šçš„ “Local to Scene†属性(以åŠåˆ°èŠ‚点内所有包å«è¯¥èµ„æºçš„资æºï¼‰ã€‚"
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Pick a Viewport"
@@ -3311,11 +3325,11 @@ msgstr "扩展脚本"
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "New %s"
-msgstr "新建%s"
+msgstr "新建 %s"
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Make Unique"
-msgstr "转æ¢ä¸ºç‹¬ç«‹èµ„æº"
+msgstr "唯一化"
#: editor/editor_properties.cpp
#: editor/plugins/animation_blend_space_1d_editor.cpp
@@ -3333,11 +3347,11 @@ msgstr "粘贴"
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Convert To %s"
-msgstr "转æ¢ä¸º%s"
+msgstr "转æ¢ä¸º %s"
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Selected node is not a Viewport!"
-msgstr "选定的ä¸æ˜¯Viewport节点ï¼"
+msgstr "选定节点ä¸æ˜¯ Viewportï¼"
#: editor/editor_properties_array_dict.cpp
msgid "Size: "
@@ -3362,7 +3376,7 @@ msgstr "新建值:"
#: editor/editor_properties_array_dict.cpp
msgid "Add Key/Value Pair"
-msgstr "添加键/值对"
+msgstr "添加键值对"
#: editor/editor_run_native.cpp
msgid ""
@@ -3375,31 +3389,31 @@ msgstr ""
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr "在_run()方法中填写您的逻辑代ç ã€‚"
+msgstr "在 _run() 方法中填写逻辑代ç ã€‚"
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr "å·²ç»å­˜åœ¨ä¸€ä¸ªæ­£åœ¨ç¼–辑的场景。"
+msgstr "已存在一个正在编辑的场景。"
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr "无法实例化脚本:"
+msgstr "无法实例化脚本:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr "您是å¦é—æ¼äº†tool关键字?"
+msgstr "是å¦é—æ¼äº† tool 关键字?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr "无法执行脚本:"
+msgstr "无法è¿è¡Œè„šæœ¬ï¼š"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
-msgstr "您是å¦é—æ¼äº†_run()方法?"
+msgstr "是å¦é—æ¼äº† _run() 方法?"
#: editor/editor_spin_slider.cpp
msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes."
-msgstr "按ä½Ctrlé”®æ¥å››èˆäº”入至整数。 按ä½Shift键获å–更精确的å˜åŒ–。"
+msgstr "æŒ‰ä½ Ctrl é”®æ¥å–整。 æŒ‰ä½ Shift 键获å–更精确的å˜åŒ–。"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3452,23 +3466,23 @@ msgstr "检索镜åƒï¼Œè¯·ç­‰å¾…..."
#: editor/export_template_manager.cpp
msgid "Remove template version '%s'?"
-msgstr "是å¦ç§»é™¤ç‰ˆæœ¬ä¸ºâ€œ%sâ€çš„模æ¿ï¼Ÿ"
+msgstr "是å¦ç§»é™¤æ¨¡æ¿ç‰ˆæœ¬ “%sâ€ï¼Ÿ"
#: editor/export_template_manager.cpp
msgid "Can't open export templates zip."
-msgstr "无法打开ZIP导出模æ¿ã€‚"
+msgstr "无法打开 ZIP 导出模æ¿ã€‚"
#: editor/export_template_manager.cpp
msgid "Invalid version.txt format inside templates: %s."
-msgstr "模æ¿æ–‡ä»¶ï¼š%s 中的 version.txt æ ¼å¼æ— æ•ˆã€‚"
+msgstr "模æ¿ä¸­çš„ version.txt æ ¼å¼æ— æ•ˆï¼š%s。"
#: editor/export_template_manager.cpp
msgid "No version.txt found inside templates."
-msgstr "模æ¿ä¸­æ²¡æœ‰æ‰¾åˆ°version.txt文件。"
+msgstr "模æ¿ä¸­æ²¡æœ‰æ‰¾åˆ° version.txt。"
#: editor/export_template_manager.cpp
msgid "Error creating path for templates:"
-msgstr "创建模æ¿æ–‡ä»¶è·¯å¾„出错:"
+msgstr "创建模æ¿è·¯å¾„出错:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
@@ -3484,7 +3498,7 @@ msgstr "获å–é•œåƒåˆ—表时出错。"
#: editor/export_template_manager.cpp
msgid "Error parsing JSON of mirror list. Please report this issue!"
-msgstr "解æžé•œåƒåˆ—表JSON时出错。请æ交此问题ï¼"
+msgstr "解æžé•œåƒåˆ—表 JSON 时出错。请æ交此问题ï¼"
#: editor/export_template_manager.cpp
msgid ""
@@ -3534,11 +3548,11 @@ msgid ""
"The problematic templates archives can be found at '%s'."
msgstr ""
"模æ¿å®‰è£…失败。\n"
-"有问题的模æ¿æ–‡æ¡£åœ¨â€œ%sâ€ã€‚"
+"有问题的模æ¿æ–‡æ¡£åœ¨ “%sâ€ã€‚"
#: editor/export_template_manager.cpp
msgid "Error requesting URL:"
-msgstr "请求URL时出错:"
+msgstr "请求 URL 时出错:"
#: editor/export_template_manager.cpp
msgid "Connecting to Mirror..."
@@ -3588,7 +3602,7 @@ msgstr "SSL æ¡æ‰‹é”™è¯¯"
#: editor/export_template_manager.cpp
msgid "Uncompressing Android Build Sources"
-msgstr "无压缩的Android Build资æº"
+msgstr "解压 Android Build 资æº"
#: editor/export_template_manager.cpp
msgid "Current Version:"
@@ -3636,11 +3650,11 @@ msgstr "状æ€ï¼šå¯¼å…¥æ–‡ä»¶å¤±è´¥ã€‚请手动修å¤æ–‡ä»¶åŽé‡æ–°å¯¼å…¥ã€‚"
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
-msgstr "无法移动/é‡å‘½å根资æºã€‚"
+msgstr "无法移动或é‡å‘½å根资æºã€‚"
#: editor/filesystem_dock.cpp
msgid "Cannot move a folder into itself."
-msgstr "无法将文件夹移动到其自身。"
+msgstr "无法将文件夹移动到文件夹自己内。"
#: editor/filesystem_dock.cpp
msgid "Error moving:"
@@ -3680,7 +3694,7 @@ msgstr "é‡å‘½å文件夹:"
#: editor/filesystem_dock.cpp
msgid "Duplicating file:"
-msgstr "æ‹·è´æ–‡ä»¶ï¼š"
+msgstr "å¤åˆ¶æ–‡ä»¶ï¼š"
#: editor/filesystem_dock.cpp
msgid "Duplicating folder:"
@@ -3700,7 +3714,7 @@ msgstr "打开场景"
#: editor/filesystem_dock.cpp
msgid "Instance"
-msgstr "创建实例节点"
+msgstr "实例"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
@@ -3724,13 +3738,18 @@ msgstr "é‡å‘½å为..."
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
-msgstr "æ‹·è´..."
+msgstr "é‡å¤..."
#: editor/filesystem_dock.cpp
msgid "Move To..."
msgstr "移动..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "移动 Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "新建场景..."
@@ -3761,11 +3780,11 @@ msgstr "é‡å‘½å"
#: editor/filesystem_dock.cpp
msgid "Previous Folder/File"
-msgstr "上一个文件夹/文件"
+msgstr "上一个文件夹或文件"
#: editor/filesystem_dock.cpp
msgid "Next Folder/File"
-msgstr "下一个文件夹/文件"
+msgstr "下一个文件夹或文件"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
@@ -3793,7 +3812,7 @@ msgstr "移动"
#: editor/filesystem_dock.cpp
msgid "There is already file or folder with the same name in this location."
-msgstr "当å‰ä½ç½®å·²å­˜åœ¨ç›¸åŒå字的文件或文件夹。"
+msgstr "当å‰ä½ç½®å·²å­˜åœ¨åŒå文件或文件夹。"
#: editor/filesystem_dock.cpp
msgid "Overwrite"
@@ -3809,7 +3828,7 @@ msgstr "创建脚本"
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
msgid "Find in Files"
-msgstr "跨文件查找"
+msgstr "在文件中查找"
#: editor/find_in_files.cpp
msgid "Find:"
@@ -3827,7 +3846,7 @@ msgstr "筛选:"
msgid ""
"Include the files with the following extensions. Add or remove them in "
"ProjectSettings."
-msgstr "包å«ä¸‹åˆ—扩展å的文件。å¯åœ¨é¡¹ç›®è®¾ç½®ä¸­å¢žåŠ æˆ–移除。"
+msgstr "包å«ä¸‹åˆ—扩展å的文件。å¯åœ¨é¡¹ç›®è®¾ç½®ä¸­æ·»åŠ æˆ–移除。"
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
#: editor/plugins/script_text_editor.cpp
@@ -3876,11 +3895,11 @@ msgstr "分组å称已存在。"
#: editor/groups_editor.cpp
msgid "Invalid group name."
-msgstr "组å无效。"
+msgstr "分组å称无效。"
#: editor/groups_editor.cpp
msgid "Rename Group"
-msgstr "é‡å‘½å组"
+msgstr "é‡å‘½å分组"
#: editor/groups_editor.cpp
msgid "Delete Group"
@@ -3917,43 +3936,43 @@ msgstr "管ç†åˆ†ç»„"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Single Scene"
-msgstr "导入为独立场景"
+msgstr "导入为å•ä¸€åœºæ™¯"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Animations"
-msgstr "与独立的动画一åŒå¯¼å…¥"
+msgstr "与动画分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials"
-msgstr "导入独立æè´¨"
+msgstr "与æ质分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects"
-msgstr "导入独立物体"
+msgstr "与对象分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials"
-msgstr "导入独立物体 + æè´¨"
+msgstr "与对象 + æ质分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Animations"
-msgstr "导入独立的物体和动画"
+msgstr "与对象 + 动画分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Materials+Animations"
-msgstr "与独立的æ质和动画一åŒå¯¼å…¥"
+msgstr "与æè´¨ + 动画分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import with Separate Objects+Materials+Animations"
-msgstr "使用å•ç‹¬çš„对象 + æè´¨ + 动画导入"
+msgstr "与对象 + æè´¨ + 动画分开导入"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes"
-msgstr "导入多个场景"
+msgstr "导入为多个场景"
#: editor/import/resource_importer_scene.cpp
msgid "Import as Multiple Scenes+Materials"
-msgstr "导入多个场景 + æè´¨"
+msgstr "导入为多个场景 + æè´¨"
#: editor/import/resource_importer_scene.cpp
#: editor/plugins/mesh_library_editor_plugin.cpp
@@ -3962,7 +3981,7 @@ msgstr "导入场景"
#: editor/import/resource_importer_scene.cpp
msgid "Importing Scene..."
-msgstr "导入场景..."
+msgstr "导入场景中..."
#: editor/import/resource_importer_scene.cpp
msgid "Generating Lightmaps"
@@ -3970,7 +3989,7 @@ msgstr "正在生æˆå…‰ç…§è´´å›¾"
#: editor/import/resource_importer_scene.cpp
msgid "Generating for Mesh: "
-msgstr "正在生æˆMesh: "
+msgstr "正在生æˆç½‘格: "
#: editor/import/resource_importer_scene.cpp
msgid "Running Custom Script..."
@@ -3990,7 +4009,7 @@ msgstr "åŽå¤„ç†è„šæœ¬è¿è¡Œå‘生错误:"
#: editor/import/resource_importer_scene.cpp
msgid "Did you return a Node-derived object in the `post_import()` method?"
-msgstr "你是å¦åœ¨ `post_import()` 方法中返回了 Node è¡ç”Ÿå¯¹è±¡ï¼Ÿ"
+msgstr "有在 `post_import()` 方法中返回继承了 Node 的对象å—?"
#: editor/import/resource_importer_scene.cpp
msgid "Saving..."
@@ -3998,15 +4017,15 @@ msgstr "ä¿å­˜ä¸­..."
#: editor/import_dock.cpp
msgid "%d Files"
-msgstr "%d个文件"
+msgstr "%d 个文件"
#: editor/import_dock.cpp
msgid "Set as Default for '%s'"
-msgstr "设置为“%sâ€çš„默认值"
+msgstr "设置为 “%s†的默认值"
#: editor/import_dock.cpp
msgid "Clear Default for '%s'"
-msgstr "清除默认'%s'"
+msgstr "清除 “%s†的默认值"
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4116,15 +4135,15 @@ msgstr "多节点组"
#: editor/node_dock.cpp
msgid "Select a single node to edit its signals and groups."
-msgstr "选择一个节点以编辑其信å·å’Œç»„。"
+msgstr "选择一个节点以编辑其信å·å’Œåˆ†ç»„。"
#: editor/plugin_config_dialog.cpp
msgid "Edit a Plugin"
-msgstr "编辑一个æ’件"
+msgstr "编辑æ’件"
#: editor/plugin_config_dialog.cpp
msgid "Create a Plugin"
-msgstr "创建一个æ’件"
+msgstr "创建æ’件"
#: editor/plugin_config_dialog.cpp
msgid "Plugin Name:"
@@ -4210,11 +4229,11 @@ msgstr "移动节点"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Limits"
-msgstr "更改混åˆç©ºé—´1Dé™åˆ¶"
+msgstr "更改 BlendSpace1D é™åˆ¶"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Labels"
-msgstr "更改混åˆç©ºé—´1D标签"
+msgstr "更改 BlendSpace1D 标签"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4234,11 +4253,11 @@ msgstr "添加动画点"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Remove BlendSpace1D Point"
-msgstr "移除混åˆç©ºé—´1D顶点"
+msgstr "移除 BlendSpace1D 顶点"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Move BlendSpace1D Node Point"
-msgstr "移动混åˆç©ºé—´1D节点顶点"
+msgstr "移动 BlendSpace1D 节点顶点"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4259,7 +4278,7 @@ msgstr "在此空间下设置ä½ç½®æ··åˆçŠ¶æ€"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Select and move points, create points with RMB."
-msgstr "选择并移动点,使用 RMB 创建点。"
+msgstr "选择并移动点,使用鼠标å³é”®åˆ›å»ºç‚¹ã€‚"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp
@@ -4294,19 +4313,19 @@ msgstr "添加三角é¢"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Change BlendSpace2D Limits"
-msgstr "更改混åˆç©ºé—´2Dé™åˆ¶"
+msgstr "更改 BlendSpace2D é™åˆ¶"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Change BlendSpace2D Labels"
-msgstr "更改混åˆç©ºé—´2D标签"
+msgstr "更改 BlendSpace2D 标签"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Remove BlendSpace2D Point"
-msgstr "移除混åˆç©ºé—´2D顶点"
+msgstr "移除 BlendSpace2D 顶点"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Remove BlendSpace2D Triangle"
-msgstr "移除混åˆç©ºé—´2D三角形"
+msgstr "移除 BlendSpace2D 三角形"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "BlendSpace2D does not belong to an AnimationTree node."
@@ -4318,11 +4337,11 @@ msgstr "ä¸å­˜åœ¨ä»»ä½•ä¸‰è§’形,因此ä¸ä¼šæœ‰ä»»ä½•æ··æ•ˆæžœåˆäº§ç”Ÿã€‚"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Toggle Auto Triangles"
-msgstr "切æ¢è‡ªåŠ¨ä¸‰è§’å½¢"
+msgstr "打开ï¼å…³é—­è‡ªåŠ¨ä¸‰è§’å½¢"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Create triangles by connecting points."
-msgstr "通过连接点创建三角形。"
+msgstr "通过连接点æ¥åˆ›å»ºä¸‰è§’形。"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Erase points and triangles."
@@ -4330,12 +4349,12 @@ msgstr "擦除点和三角形。"
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Generate blend triangles automatically (instead of manually)"
-msgstr "自动创建混åˆä¸‰è§’形(éžæ‰‹åŠ¨ï¼‰"
+msgstr "自动生æˆæ··åˆä¸‰è§’形(而éžæ‰‹åŠ¨ï¼‰"
#: editor/plugins/animation_blend_space_2d_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend:"
-msgstr "æ··åˆ:"
+msgstr "æ··åˆï¼š"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Parameter Changed"
@@ -4352,7 +4371,7 @@ msgstr "输出节点ä¸èƒ½è¢«æ·»åŠ åˆ°æ··åˆæ ‘。"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Add Node to BlendTree"
-msgstr "在åˆæˆæ ‘中添加节点"
+msgstr "添加节点到 BlendTree"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Node Moved"
@@ -4400,7 +4419,7 @@ msgstr "没有设置动画播放器,因此无法获å–轨é“å称。"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Player path set is invalid, so unable to retrieve track names."
-msgstr "无效的播放器路劲设置,因此无法获å–轨é“å称。"
+msgstr "播放器路径设置无效,无法获å–轨é“å称。"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/plugins/root_motion_editor_plugin.cpp
@@ -4442,7 +4461,7 @@ msgstr "å¯ç”¨ç­›é€‰"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr "切æ¢AutoPlay"
+msgstr "打开ï¼å…³é—­è‡ªåŠ¨æ’­æ”¾"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
@@ -4501,7 +4520,7 @@ msgstr "没有需è¦å¤åˆ¶çš„动画ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation resource on clipboard!"
-msgstr "剪切æ¿ä¸­ä¸å­˜åœ¨åŠ¨ç”»èµ„æºï¼"
+msgstr "剪贴æ¿ä¸­ä¸å­˜åœ¨åŠ¨ç”»èµ„æºï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
@@ -4513,7 +4532,7 @@ msgstr "粘贴动画"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "No animation to edit!"
-msgstr "没有动画需è¦ç¼–辑ï¼"
+msgstr "没有动画能编辑ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
@@ -4537,11 +4556,11 @@ msgstr "从当å‰ä½ç½®æ’­æ”¾é€‰ä¸­åŠ¨ç”»ï¼ˆD)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
-msgstr "动画ä½ç½®ï¼ˆå•ä½:秒)。"
+msgstr "动画ä½ç½®ï¼ˆç§’)。"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Scale animation playback globally for the node."
-msgstr "节点全局缩放动画播放。"
+msgstr "为节点全局缩放动画播放。"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
@@ -4569,7 +4588,7 @@ msgstr "加载åŽè‡ªåŠ¨æ’­æ”¾"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Enable Onion Skinning"
-msgstr "å¯ç”¨æ´‹è‘±çš®(Onion Skinning)"
+msgstr "å¯ç”¨æ´‹è‘±çš®"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Onion Skinning Options"
@@ -4589,23 +4608,23 @@ msgstr "未æ¥"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Depth"
-msgstr "Depth(深度)"
+msgstr "深度"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "1 step"
-msgstr "1æ­¥"
+msgstr "1 æ­¥"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "2 steps"
-msgstr "2æ­¥"
+msgstr "2 æ­¥"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "3 steps"
-msgstr "3æ­¥"
+msgstr "3 æ­¥"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Differences Only"
-msgstr "ä»…ä¸åŒ"
+msgstr "仅差异"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Force White Modulate"
@@ -4613,7 +4632,7 @@ msgstr "强制用白色调和"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Include Gizmos (3D)"
-msgstr "包括3D控制器"
+msgstr "包括 Gizmo (3D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Pin AnimationPlayer"
@@ -4636,11 +4655,11 @@ msgstr "错误ï¼"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr "æ··åˆæ—¶é—´:"
+msgstr "æ··åˆæ—¶é—´ï¼š"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr "接下æ¥ï¼ˆè‡ªåŠ¨æŽ’列):"
+msgstr "接下æ¥ï¼ˆè‡ªåŠ¨é˜Ÿåˆ—):"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
@@ -4665,11 +4684,11 @@ msgstr "添加节点"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "End"
-msgstr "终点"
+msgstr "结æŸ"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Immediate"
-msgstr "å³åˆ»"
+msgstr "ç«‹å³"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Sync"
@@ -4677,7 +4696,7 @@ msgstr "åŒæ­¥"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "At End"
-msgstr "在终点"
+msgstr "在结尾"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Travel"
@@ -4689,7 +4708,7 @@ msgstr "å­è¿‡æ¸¡åŠ¨ç”»éœ€è¦å¼€å§‹å’Œç»“æŸèŠ‚点。"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "No playback resource set at path: %s."
-msgstr "路径下无播放资æºï¼š%s。"
+msgstr "路径下无å¯æ’­æ”¾èµ„æºï¼š%s。"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Node Removed"
@@ -4727,11 +4746,11 @@ msgstr "移除选中的节点或过渡动画。"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Toggle autoplay this animation on start, restart or seek to zero."
-msgstr "å¼€å¯æˆ–关闭动画的自动播放,在开始,é‡å¯æˆ–者æœç´¢0ä½ç½®å¤„。"
+msgstr "å¼€å¯æˆ–关闭动画在开始,é‡å¯æˆ–者æœç´¢0ä½ç½®å¤„的自动播放。"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set the end animation. This is useful for sub-transitions."
-msgstr "设置终点结æŸåŠ¨ç”»ã€‚这对于å­è¿‡æ¸¡åŠ¨ç”»éžå¸¸æœ‰ç”¨ã€‚"
+msgstr "设置终点结æŸåŠ¨ç”»ã€‚适用于å­è¿‡æ¸¡åŠ¨ç”»ã€‚"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition: "
@@ -4765,11 +4784,11 @@ msgstr "淡出(秒):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend"
-msgstr "æ··åˆ"
+msgstr "æ··åˆ (Blend)"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Mix"
-msgstr "æ··åˆ"
+msgstr "æ··åˆ (Mix)"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
@@ -4794,19 +4813,19 @@ msgstr "æ•°é‡:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend 0:"
-msgstr "æ··åˆ0:"
+msgstr "æ··åˆ 0:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend 1:"
-msgstr "æ··åˆ1:"
+msgstr "æ··åˆ 1:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr "X-Fade(交å‰æ·¡åŒ–)时间(s):"
+msgstr "交å‰æ·¡åŒ– (X-Fade) 时间(秒):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Current:"
-msgstr "当å‰:"
+msgstr "当å‰ï¼š"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -4816,15 +4835,15 @@ msgstr "添加输入"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr "清除Auto-Advance"
+msgstr "清除自动 Advance"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr "设置清除Auto-Advance"
+msgstr "设置自动 Advance"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Delete Input"
-msgstr "删除输入事件"
+msgstr "删除输入"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Animation tree is valid."
@@ -4844,31 +4863,31 @@ msgstr "å•é¡¹èŠ‚点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Mix Node"
-msgstr "æ··åˆ(Mix)节点"
+msgstr "Mix 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr "æ··åˆ2(Blend) 节点"
+msgstr "Blend2 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr "æ··åˆ3(Blend) 节点"
+msgstr "Blend3 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr "æ··åˆ4(Blend) 节点"
+msgstr "Blend4 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr "时间缩放节点"
+msgstr "TimeScale 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr "TimeSeek(时间寻找) 节点"
+msgstr "TimeSeek 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Transition Node"
-msgstr "过渡节点"
+msgstr "Transition 节点"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Import Animations..."
@@ -4896,11 +4915,11 @@ msgstr "连接错误,请é‡è¯•ã€‚"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't connect to host:"
-msgstr "无法连接到æœåŠ¡å™¨:"
+msgstr "无法连接到主机:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No response from host:"
-msgstr "æœåŠ¡å™¨æ— å“应:"
+msgstr "主机无å“应:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Can't resolve hostname:"
@@ -4908,7 +4927,7 @@ msgstr "无法解æžä¸»æœºå:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
-msgstr "请求失败,错误代ç :"
+msgstr "请求失败,返回代ç ï¼š"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed."
@@ -4940,7 +4959,7 @@ msgstr "超时。"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr "文件hash值错误,该文件å¯èƒ½è¢«ç¯¡æ”¹ã€‚"
+msgstr "文件哈希值错误,该文件å¯èƒ½è¢«ç¯¡æ”¹ã€‚"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -4952,7 +4971,7 @@ msgstr "获得:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed sha256 hash check"
-msgstr "sha256哈希值校验失败"
+msgstr "SHA-256 哈希值校验失败"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
@@ -4960,7 +4979,7 @@ msgstr "ç´ æ下载出错:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
-msgstr "下载中(%s / %s)..."
+msgstr "下载中 (%s / %s)..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading..."
@@ -4976,7 +4995,7 @@ msgstr "请求错误"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
-msgstr "空闲"
+msgstr "闲置"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Install..."
@@ -4992,7 +5011,7 @@ msgstr "下载错误"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "已在下载此素æï¼"
+msgstr "此素æ已在下载ï¼"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
@@ -5000,7 +5019,7 @@ msgstr "最近更新"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Least Recently Updated"
-msgstr "最久未更新"
+msgstr "最近更新(倒åºï¼‰"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Name (A-Z)"
@@ -5040,7 +5059,7 @@ msgstr "全部"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr "未找到“%sâ€ã€‚"
+msgstr "未找到 “%sâ€ã€‚"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5052,16 +5071,16 @@ msgstr "æ’件..."
#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
msgid "Sort:"
-msgstr "排åº:"
+msgstr "排åºï¼š"
#: editor/plugins/asset_library_editor_plugin.cpp
#: editor/project_settings_editor.cpp
msgid "Category:"
-msgstr "分类:"
+msgstr "分类:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr "站点:"
+msgstr "站点:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Support"
@@ -5081,7 +5100,7 @@ msgstr "载入中..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "ç´ æZIP文件"
+msgstr "ç´ æ ZIP 文件"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5097,7 +5116,7 @@ msgstr ""
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake "
"Light' flag is on."
-msgstr "没有å¯çƒ˜ç„™çš„Mesh。请确ä¿Mesh包å«UV2通é“并且勾选'Bake Light'选项。"
+msgstr "没有å¯çƒ˜ç„™çš„网格。请确ä¿ç½‘æ ¼åŒ…å« UV2 通é“并且勾选 “Bake Light†选项。"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5174,50 +5193,43 @@ msgstr "创建垂直水平å‚考线"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "å°† CanvasItem “%sâ€çš„ Pivot Offset 设为 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "旋转 CanvasItem"
+msgstr "旋转 %d 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "旋转 CanvasItem"
+msgstr "旋转 CanvasItem “%s†为 %d 度"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "移动 CanvasItem"
+msgstr "移动 CanvasItem “%s†的锚点"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "缩放 Node2D “%s†为 (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "缩放 Control “%s†为 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "缩放包å«é¡¹"
+msgstr "缩放 %d 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "缩放包å«é¡¹"
+msgstr "缩放 CanvasItem “%s†为 (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "移动 CanvasItem"
+msgstr "移动 %s 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "移动 CanvasItem"
+msgstr "移动 CanvasItem “%s†至 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5227,29 +5239,29 @@ msgstr "容器的å­çº§çš„锚点和边è·å€¼è¢«å…¶çˆ¶å®¹å™¨é‡å†™ã€‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Presets for the anchors and margins values of a Control node."
-msgstr "控件节点的定ä½ç‚¹å’Œè¾¹è·å€¼çš„预设。"
+msgstr "Control 节点的定ä½ç‚¹å’Œè¾¹è·å€¼çš„预设。"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
"When active, moving Control nodes changes their anchors instead of their "
"margins."
-msgstr "激活åŽï¼Œç§»åŠ¨æŽ§åˆ¶èŠ‚点会更改å˜é”šç‚¹ï¼Œè€Œéžè¾¹è·ã€‚"
+msgstr "激活åŽï¼Œç§»åŠ¨ Control 节点会更改å˜é”šç‚¹ï¼Œè€Œéžè¾¹è·ã€‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Left"
-msgstr "左上角"
+msgstr "左上"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Right"
-msgstr "å³ä¸Šè§’"
+msgstr "å³ä¸Š"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Right"
-msgstr "å³ä¸‹è§’"
+msgstr "å³ä¸‹"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Bottom Left"
-msgstr "左下角"
+msgstr "左下"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Left"
@@ -5371,7 +5383,7 @@ msgstr "清除骨骼"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr "添加IK链"
+msgstr "添加 IK 链"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
@@ -5404,7 +5416,7 @@ msgstr "Alt+拖动:移动"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
-msgstr "按下V键修改旋转中心,在移动时按下Shift+Væ¥æ‹–动它。"
+msgstr "按下 “V†键修改旋转中心,在移动时按下 Shift+V æ¥æ‹–动它。"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+RMB: Depth list selection"
@@ -5432,7 +5444,7 @@ msgid ""
"(same as Alt+RMB in select mode)."
msgstr ""
"显示鼠标点击ä½ç½®çš„所有节点\n"
-"(åŒAlt+é¼ æ ‡å³é”®ï¼‰ã€‚"
+"ï¼ˆåŒ Alt + é¼ æ ‡å³é”®ï¼‰ã€‚"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
@@ -5645,11 +5657,11 @@ msgstr "清除姿势"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
-msgstr "网格步进乘以2"
+msgstr "网格步进乘以 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr "网格步进除以2"
+msgstr "网格步进除以 2"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan View"
@@ -5657,7 +5669,7 @@ msgstr "平移视图"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
-msgstr "添加%s"
+msgstr "添加 %s"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Adding %s..."
@@ -5675,7 +5687,7 @@ msgstr "创建节点"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Error instancing scene from %s"
-msgstr "从%s实例化场景出错"
+msgstr "从 %s 实例化场景出错"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Default Type"
@@ -5686,12 +5698,12 @@ msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
-"拖放+ Shift:将节点添加为兄弟节点\n"
-"拖放+ Alt:更改节点类型"
+"拖放 + Shift:将节点添加为兄弟节点\n"
+"拖放 + Alt:更改节点类型"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Polygon3D"
-msgstr "创建Polygon3D"
+msgstr "创建 Polygon3D"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Edit Poly"
@@ -5736,7 +5748,7 @@ msgstr "生æˆé¡¶ç‚¹è®¡æ•°:"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Mask"
-msgstr "Emission Mask(å‘å°„é®æŒ¡)"
+msgstr "å‘å°„é®ç½©"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -5761,29 +5773,29 @@ msgstr "从åƒç´ æ•èŽ·"
#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Emission Colors"
-msgstr "Emission Colors(自å‘光颜色)"
+msgstr "å‘射色彩"
#: editor/plugins/cpu_particles_editor_plugin.cpp
msgid "CPUParticles"
-msgstr "CPUç²’å­"
+msgstr "CPUParticles"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Mesh"
-msgstr "从Mesh创建å‘射点"
+msgstr "从网格创建å‘射点"
#: editor/plugins/cpu_particles_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emission Points From Node"
-msgstr "从Node创建å‘射点"
+msgstr "从节点创建å‘射点"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 0"
-msgstr "ä¿æŒ0"
+msgstr "Flat 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr "ä¿æŒ1"
+msgstr "Flat 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -5835,7 +5847,7 @@ msgstr "移除曲线点"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Toggle Curve Linear Tangent"
-msgstr "切æ¢æ›²çº¿çº¿æ€§Tangent"
+msgstr "切æ¢æ›²çº¿çº¿æ€§æ­£åˆ‡"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Hold Shift to edit tangents individually"
@@ -5847,7 +5859,7 @@ msgstr "é¼ æ ‡å³é”®æ·»åŠ ç‚¹"
#: editor/plugins/gi_probe_editor_plugin.cpp
msgid "Bake GI Probe"
-msgstr "烘培GI探针"
+msgstr "烘培 GI 探针"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Gradient Edited"
@@ -5855,7 +5867,7 @@ msgstr "æ¸å˜ç¼–辑"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
-msgstr "第%d项"
+msgstr "第 %d 项"
#: editor/plugins/item_list_editor_plugin.cpp
msgid "Items"
@@ -5875,11 +5887,11 @@ msgstr "网格为空ï¼"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Couldn't create a Trimesh collision shape."
-msgstr "无法创建Trimesh碰撞形状。"
+msgstr "无法创建三角网格碰撞形状。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr "创建é™æ€ä¸‰ç»´èº«ä½“"
+msgstr "创建é™æ€ä¸‰è§’网格身体"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
@@ -5887,7 +5899,7 @@ msgstr "æ­¤æ“作无法引用在根节点上ï¼"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Shape"
-msgstr "创建三维网格é™æ€å½¢çŠ¶"
+msgstr "创建三角网格é™æ€å½¢çŠ¶"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Can't create a single convex collision shape for the scene root."
@@ -5919,23 +5931,23 @@ msgstr "创建导航网格"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Contained Mesh is not of type ArrayMesh."
-msgstr "包å«çš„Meshä¸æ˜¯ArrayMesh类型。"
+msgstr "包å«çš„ Mesh ä¸æ˜¯ ArrayMesh 类型。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "UV Unwrap failed, mesh may not be manifold?"
-msgstr "UV展开失败,å¯èƒ½è¯¥ç½‘格并éžæµå½¢ï¼Ÿ"
+msgstr "UV 展开失败,å¯èƒ½è¯¥ç½‘格并éžæµå½¢ï¼Ÿ"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "No mesh to debug."
-msgstr "没有è¦è°ƒè¯•çš„网格。"
+msgstr "没有å¯è°ƒè¯•çš„网格。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Model has no UV in this layer"
-msgstr "模型在此层上没有UV图"
+msgstr "模型在此层上没有 UV"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
-msgstr "MeshInstance (网格实例) 缺少 Mesh(网格)ï¼"
+msgstr "MeshInstance 缺少 Meshï¼"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
@@ -5943,7 +5955,7 @@ msgstr "网格没有å¯ç”¨æ¥åˆ›å»ºè½®å»“的表é¢ï¼"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!"
-msgstr "网格原始类型ä¸æ˜¯ PRIMITIVE_TRIANGLES(三角形网格)ï¼"
+msgstr "Mesh 原始类型ä¸æ˜¯ PRIMITIVE_TRIANGLESï¼"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
@@ -5967,7 +5979,7 @@ msgid ""
"automatically.\n"
"This is the most accurate (but slowest) option for collision detection."
msgstr ""
-"创建StaticBody并自动为其分é…基于多边形的碰撞形状。\n"
+"创建 StaticBody 并自动为其分é…基于多边形的碰撞形状。\n"
"这是最准确(但是最慢)的碰撞检测手段。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6018,19 +6030,19 @@ msgid ""
"that property isn't possible."
msgstr ""
"创建一个é™æ€è½®å»“网格。轮廓网格会自动翻转法线。\n"
-"å¯ä»¥ç”¨æ¥åœ¨å¿…è¦æ—¶ä»£æ›¿SpatialMaterialçš„Grow属性。"
+"å¯ä»¥ç”¨æ¥åœ¨å¿…è¦æ—¶ä»£æ›¿ SpatialMaterial çš„ Grow 属性。"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "View UV1"
-msgstr "查看UV1"
+msgstr "查看 UV1"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "View UV2"
-msgstr "查看UV2"
+msgstr "查看 UV2"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Unwrap UV2 for Lightmap/AO"
-msgstr "为光照映射/环境光é®è”½å±•å¼€UV2"
+msgstr "为光照映射或环境光é®è”½å±•å¼€ UV2"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
@@ -6042,11 +6054,11 @@ msgstr "轮廓大å°ï¼š"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "UV Channel Debug"
-msgstr "调试UV通é“"
+msgstr "调试 UV 通é“"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr "确定è¦ç§»é™¤é¡¹ç›®%då—?"
+msgstr "确定è¦ç§»é™¤é¡¹ç›® %d å—?"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid ""
@@ -6079,11 +6091,11 @@ msgstr "从场景中更新"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and no MultiMesh set in node)."
-msgstr "未指定网格æºï¼ˆä¸”节点中没有设置多网格物体(MultiMesh))。"
+msgstr "未指定网格æºï¼ˆä¸”节点中没有设置 MultiMesh 集)。"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and MultiMesh contains no Mesh)."
-msgstr "未指定网格æºï¼ˆä¸”多网格(MultiMesh)ä¸åŒ…å«ç½‘æ ¼(Mesh))。"
+msgstr "未指定网格æºï¼ˆä¸” MultiMesh ä¸åŒ…å« Mesh)。"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (invalid path)."
@@ -6091,11 +6103,11 @@ msgstr "网格æºæ— æ•ˆï¼ˆè·¯å¾„无效)。"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (not a MeshInstance)."
-msgstr "网格æºæ— æ•ˆï¼ˆä¸æ˜¯ç½‘格实例(MeshInstance))。"
+msgstr "网格æºæ— æ•ˆï¼ˆä¸æ˜¯ MeshInstance)。"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (contains no Mesh resource)."
-msgstr "网格æºæ— æ•ˆï¼ˆä¸åŒ…å«ç½‘æ ¼(Mesh)资æºï¼‰ã€‚"
+msgstr "网格æºæ— æ•ˆï¼ˆä¸åŒ…å« Mesh 资æºï¼‰ã€‚"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No surface source specified."
@@ -6115,7 +6127,7 @@ msgstr "表é¢çš„æºæ— æ•ˆï¼ˆæ— é¢ï¼‰ã€‚"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
-msgstr "选择æºç½‘æ ¼:"
+msgstr "选择æºç½‘格:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Target Surface:"
@@ -6127,7 +6139,7 @@ msgstr "填充表é¢"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate MultiMesh"
-msgstr "å¡«å……MultiMesh"
+msgstr "å¡«å…… MultiMesh"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Target Surface:"
@@ -6139,11 +6151,11 @@ msgstr "æºç½‘格:"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "X-Axis"
-msgstr "Xè½´"
+msgstr "X è½´"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Y-Axis"
-msgstr "Yè½´"
+msgstr "Y è½´"
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Z-Axis"
@@ -6177,7 +6189,7 @@ msgstr "创建导航多边形"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Convert to CPUParticles"
-msgstr "转æ¢ä¸º CPUç²’å­"
+msgstr "转æ¢ä¸º CPUParticles"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generating Visibility Rect"
@@ -6189,12 +6201,12 @@ msgstr "生æˆå¯è§†åŒ–区域"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr "å¯ä»¥è®¾ç½®ParticlesMaterial 点的æè´¨"
+msgstr "åªå¯è®¾ä¸ºæŒ‡å‘ ParticlesMaterial 处ç†ææ–™"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generation Time (sec):"
-msgstr "生æˆæ—¶é—´ï¼ˆç§’):"
+msgstr "生æˆæ—¶é—´ï¼ˆç§’):"
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry's faces don't contain any area."
@@ -6206,23 +6218,23 @@ msgstr "几何体ä¸åŒ…å«ä»»ä½•é¢ã€‚"
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't inherit from Spatial."
-msgstr "“%sâ€æœªä»ŽSpatial继承。"
+msgstr "“%s†未从 Spatial 继承。"
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't contain geometry."
-msgstr "\"%s\"ä¸åŒ…å«å‡ ä½•ä½“。"
+msgstr "“%s†ä¸åŒ…å«å‡ ä½•ä½“。"
#: editor/plugins/particles_editor_plugin.cpp
msgid "\"%s\" doesn't contain face geometry."
-msgstr "\"%s\"ä¸åŒ…å«é¢å‡ ä½•ä½“。"
+msgstr "“%s†ä¸åŒ…å«é¢å‡ ä½•ä½“。"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter"
-msgstr "创建å‘射器(Emitter)"
+msgstr "创建å‘射器 (Emitter)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Emission Points:"
-msgstr "å‘å°„ä½ç½®:"
+msgstr "å‘å°„ä½ç½®ï¼š"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points"
@@ -6230,7 +6242,7 @@ msgstr "表é¢é¡¶ç‚¹"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Surface Points+Normal (Directed)"
-msgstr "表é¢å®šç‚¹+法线(方å‘å‘é‡ï¼‰"
+msgstr "表é¢å®šç‚¹ + 法线(有å‘)"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
@@ -6242,19 +6254,19 @@ msgstr "å‘å°„æºï¼š "
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr "需è¦ä½¿ç”¨â€œParticlesMaterialâ€ç±»åž‹çš„处ç†æ质。"
+msgstr "需è¦ä½¿ç”¨ “ParticlesMaterial†类型的处ç†æ质。"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generating AABB"
-msgstr "正在生æˆAABB"
+msgstr "æ­£åœ¨ç”Ÿæˆ AABB"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generate Visibility AABB"
-msgstr "生æˆå¯è§çš„AABB"
+msgstr "生æˆå¯è§çš„ AABB"
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generate AABB"
-msgstr "生æˆAABB"
+msgstr "ç”Ÿæˆ AABB"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
@@ -6297,12 +6309,12 @@ msgstr "选择顶点"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+拖拽:选择控制点"
+msgstr "Shift+拖动:选择控制点"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Click: Add Point"
-msgstr "鼠标左键:添加点"
+msgstr "å•å‡»ï¼šæ·»åŠ ç‚¹"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Left Click: Split Segment (in curve)"
@@ -6311,11 +6323,11 @@ msgstr "鼠标左键:拆分片段(曲线内)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Right Click: Delete Point"
-msgstr "é¼ æ ‡å³é”®:删除点"
+msgstr "é¼ æ ‡å³é”®ï¼šåˆ é™¤ç‚¹"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
-msgstr "选择控制点(Shift+拖动)"
+msgstr "选择控制点(Shift+拖动)"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -6358,11 +6370,11 @@ msgstr "设置曲线的顶点åæ ‡"
#: editor/plugins/path_editor_plugin.cpp
msgid "Set Curve In Position"
-msgstr "设置的曲线åˆå§‹ä½ç½®ï¼ˆPos)"
+msgstr "设置曲线内控点ä½ç½®"
#: editor/plugins/path_editor_plugin.cpp
msgid "Set Curve Out Position"
-msgstr "设置曲线外控制点"
+msgstr "设置曲线外控点ä½ç½®"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
@@ -6374,15 +6386,15 @@ msgstr "移除路径顶点"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove Out-Control Point"
-msgstr "移除曲线外控制点"
+msgstr "移除外控点"
#: editor/plugins/path_editor_plugin.cpp
msgid "Remove In-Control Point"
-msgstr "移除曲线内控制点"
+msgstr "移除内控点"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
-msgstr "拆分(曲线)"
+msgstr "拆分线段(在曲线中)"
#: editor/plugins/physical_bone_plugin.cpp
msgid "Move Joint"
@@ -6391,7 +6403,7 @@ msgstr "移动关节"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"The skeleton property of the Polygon2D does not point to a Skeleton2D node"
-msgstr "Polygon2D 的骨架属性并没有指å‘一个 Skeleton2D 节点"
+msgstr "Polygon2D çš„éª¨æž¶å±žæ€§å¹¶æ²¡æœ‰æŒ‡å‘ Skeleton2D 节点"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Sync Bones"
@@ -6407,13 +6419,13 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
-msgstr "创建UV贴图"
+msgstr "创建 UV 贴图"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"Polygon 2D has internal vertices, so it can no longer be edited in the "
"viewport."
-msgstr "多边形2d 具有内部顶点, å› æ­¤ä¸èƒ½å†åœ¨è§†å£ä¸­å¯¹å…¶è¿›è¡Œç¼–辑。"
+msgstr "Polygon2D 具有内部顶点,因此ä¸èƒ½å†äºŽè§†å£ä¸­å¯¹å…¶è¿›è¡Œç¼–辑。"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
@@ -6453,11 +6465,11 @@ msgstr "绘制骨骼æƒé‡"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Open Polygon 2D UV editor."
-msgstr "打开2D多边形UV编辑器。"
+msgstr "打开 2D 多边形 UV 编辑器。"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon 2D UV Editor"
-msgstr "2D多边形UV编辑器"
+msgstr "2D 多边形 UV 编辑器"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "UV"
@@ -6480,22 +6492,20 @@ msgid "Move Points"
msgstr "移动点"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "拖动æ¥æ—‹è½¬"
+msgstr "Command: 旋转"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift: 移动所有"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl: 缩放"
+msgstr "Shift+Command: 缩放"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
-msgstr "Ctrl:旋转"
+msgstr "Ctrl: 旋转"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift+Ctrl: Scale"
@@ -6515,13 +6525,13 @@ msgstr "缩放多边形"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create a custom polygon. Enables custom polygon rendering."
-msgstr "建立自定义多边形。å¯ç”¨è‡ªå®šä¹‰å¤šè¾¹å½¢æ¸²æŸ“。"
+msgstr "创建自定义多边形。å¯ç”¨è‡ªå®šä¹‰å¤šè¾¹å½¢æ¸²æŸ“。"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"Remove a custom polygon. If none remain, custom polygon rendering is "
"disabled."
-msgstr "移除自定义多边形。如果ä¸å­˜åœ¨ï¼Œç¦ç”¨è‡ªå®šä¹‰å¤šè¾¹å½¢æ¸²æŸ“。"
+msgstr "移除自定义多边形。如果没有剩下任何多边形,则会ç¦ç”¨è‡ªå®šä¹‰å¤šè¾¹å½¢æ¸²æŸ“。"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint weights with specified intensity."
@@ -6536,18 +6546,16 @@ msgid "Radius:"
msgstr "åŠå¾„:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "创建多边形和 UV"
+msgstr "å¤åˆ¶å¤šè¾¹å½¢ä¸º UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "转æ¢ä¸ºPolygon2D"
+msgstr "å¤åˆ¶ UV 为多边形"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
-msgstr "清除UV"
+msgstr "清除 UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Settings"
@@ -6645,7 +6653,7 @@ msgstr "预加载资æº"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
-msgstr "AnimationTree 没有设置路径到一个 AnimationPlayer"
+msgstr "AnimationTree 没有设置到 AnimationPlayer 的路径"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "Path to AnimationPlayer is invalid"
@@ -6714,7 +6722,7 @@ msgstr "脚本并éžå¤„于工具模å¼ï¼Œæ— æ³•æ‰§è¡Œã€‚"
#: editor/plugins/script_editor_plugin.cpp
msgid ""
"To run this script, it must inherit EditorScript and be set to tool mode."
-msgstr "如需执行此脚本,必须继承EditorScript并将其设为工具模å¼ã€‚"
+msgstr "如需执行此脚本,必须继承 EditorScript 并将其设为工具模å¼ã€‚"
#: editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
@@ -6752,7 +6760,7 @@ msgstr "筛选脚本"
#: editor/plugins/script_editor_plugin.cpp
msgid "Toggle alphabetical sorting of the method list."
-msgstr "切æ¢æŒ‰å­—æ¯è¡¨æŽ’åºæ–¹å¼æŽ’列方法。"
+msgstr "切æ¢æŒ‰å­—æ¯é¡ºåºæŽ’列方法。"
#: editor/plugins/script_editor_plugin.cpp
msgid "Filter methods"
@@ -6870,7 +6878,7 @@ msgstr "使用外部编辑器进行调试"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation."
-msgstr "打开Godot在线文档。"
+msgstr "打开 Godot 在线文档。"
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
@@ -6933,7 +6941,7 @@ msgstr "目标"
#: editor/plugins/script_text_editor.cpp
msgid ""
"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."
-msgstr "未找到方法“%sâ€ï¼ˆè¿žæŽ¥äºŽä¿¡å·â€œ%sâ€ã€æ¥è‡ªèŠ‚点“%sâ€ã€ç›®æ ‡èŠ‚点“%sâ€ï¼‰ã€‚"
+msgstr "未找到方法 “%sâ€ï¼ˆè¿žæŽ¥äºŽä¿¡å·â€œ%sâ€ã€æ¥è‡ªèŠ‚点“%sâ€ã€ç›®æ ‡èŠ‚点“%sâ€ï¼‰ã€‚"
#: editor/plugins/script_text_editor.cpp
msgid "[Ignore]"
@@ -6949,12 +6957,12 @@ msgstr "转到函数"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr "åªå¯ä»¥æ‹–拽æ¥è‡ªæ–‡ä»¶ç³»ç»Ÿä¸­çš„资æºã€‚"
+msgstr "åªå¯æ‹–放æ¥è‡ªæ–‡ä»¶ç³»ç»Ÿä¸­çš„资æºã€‚"
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't drop nodes because script '%s' is not used in this scene."
-msgstr "无法放置该节点,因为脚本“%sâ€æœªåœ¨è¯¥åœºæ™¯ä¸­ä½¿ç”¨ã€‚"
+msgstr "无法放置该节点,因为脚本 “%s†未在该场景中使用。"
#: editor/plugins/script_text_editor.cpp
msgid "Lookup Symbol"
@@ -6996,7 +7004,7 @@ msgstr "断点"
#: editor/plugins/script_text_editor.cpp
#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
msgid "Go To"
-msgstr "跳转到"
+msgstr "转到"
#: editor/plugins/script_text_editor.cpp scene/gui/line_edit.cpp
#: scene/gui/text_edit.cpp
@@ -7026,7 +7034,7 @@ msgstr "切æ¢æ³¨é‡Š"
#: editor/plugins/script_text_editor.cpp
msgid "Fold/Unfold Line"
-msgstr "折å /展开行"
+msgstr "折å ï¼å±•å¼€è¡Œ"
#: editor/plugins/script_text_editor.cpp
msgid "Fold All Lines"
@@ -7034,7 +7042,7 @@ msgstr "折å æ‰€æœ‰è¡Œ"
#: editor/plugins/script_text_editor.cpp
msgid "Unfold All Lines"
-msgstr "å–消折å æ‰€æœ‰è¡Œ"
+msgstr "展开所有行"
#: editor/plugins/script_text_editor.cpp
msgid "Clone Down"
@@ -7058,7 +7066,7 @@ msgstr "将缩进转为空格"
#: editor/plugins/script_text_editor.cpp
msgid "Convert Indent to Tabs"
-msgstr "将缩进转为Tabs"
+msgstr "将缩进转为制表符"
#: editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
@@ -7099,7 +7107,7 @@ msgstr "转到行..."
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Toggle Breakpoint"
-msgstr "切æ¢æ–­ç‚¹"
+msgstr "设置ï¼ç§»é™¤æ–­ç‚¹"
#: editor/plugins/script_text_editor.cpp
msgid "Remove All Breakpoints"
@@ -7107,18 +7115,18 @@ msgstr "移除所有断点"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Next Breakpoint"
-msgstr "å‰å¾€ä¸‹ä¸€ä¸ªæ–­ç‚¹"
+msgstr "转到下一个断点"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Previous Breakpoint"
-msgstr "å‰å¾€ä¸Šä¸€ä¸ªæ–­ç‚¹"
+msgstr "转到上一个断点"
#: editor/plugins/shader_editor_plugin.cpp
msgid ""
"This shader has been modified on on disk.\n"
"What action should be taken?"
msgstr ""
-"æ­¤ç€è‰²å™¨å·²åœ¨ç£ç›˜ä¸Šä¿®æ”¹.\n"
+"æ­¤ç€è‰²å™¨å·²åœ¨ç£ç›˜ä¸Šä¿®æ”¹ã€‚\n"
"应该采å–什么行动?"
#: editor/plugins/shader_editor_plugin.cpp
@@ -7179,15 +7187,15 @@ msgstr "已忽略å˜æ¢ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "X-Axis Transform."
-msgstr "Xè½´å˜æ¢ã€‚"
+msgstr "X è½´å˜æ¢ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Y-Axis Transform."
-msgstr "Yè½´å˜æ¢ã€‚"
+msgstr "Y è½´å˜æ¢ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Z-Axis Transform."
-msgstr "Zè½´å˜æ¢ã€‚"
+msgstr "Z è½´å˜æ¢ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Plane Transform."
@@ -7203,7 +7211,7 @@ msgstr "移动: "
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
-msgstr "旋转%s度。"
+msgstr "旋转 %s 度。"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Keying is disabled (no key inserted)."
@@ -7343,7 +7351,7 @@ msgstr "查看信æ¯"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View FPS"
-msgstr "查看帧率"
+msgstr "查看 FPS"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Half Resolution"
@@ -7363,7 +7371,7 @@ msgstr "效果预览"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Not available when using the GLES2 renderer."
-msgstr "使用GLES2渲染器时ä¸å¯ç”¨ã€‚"
+msgstr "使用 GLES2 渲染器时ä¸å¯ç”¨ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Left"
@@ -7406,12 +7414,12 @@ msgid ""
"Note: The FPS value displayed is the editor's framerate.\n"
"It cannot be used as a reliable indication of in-game performance."
msgstr ""
-"注æ„:显示的FPS值是编辑器的帧速率。\n"
-"它ä¸èƒ½ç”¨äºŽè¡¨çŽ°æ¸¸æˆä¸­çš„实际性能。"
+"注æ„:显示的 FPS 值是编辑器的帧速率。\n"
+"ä¸èƒ½å馈出实际游æˆä¸­çš„性能。"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
-msgstr "XForm对è¯æ¡†"
+msgstr "XForm 对è¯æ¡†"
#: editor/plugins/spatial_editor_plugin.cpp
msgid ""
@@ -7423,9 +7431,9 @@ msgid ""
msgstr ""
"点击以切æ¢å¯è§çŠ¶æ€ã€‚\n"
"\n"
-"ç眼:标志å¯è§ã€‚\n"
-"闭眼:标志éšè—。\n"
-"åŠç眼:标志也å¯ç©¿è¿‡ä¸é€æ˜Žçš„表é¢å¯è§ï¼ˆâ€œXå…‰â€ï¼‰ã€‚"
+"ç眼:Gizmo å¯è§ã€‚\n"
+"闭眼:Gizmo éšè—。\n"
+"åŠç眼:Gizmo 也å¯ç©¿è¿‡ä¸é€æ˜Žçš„表é¢å¯è§ï¼ˆâ€œX-Ray - X å…‰â€ï¼‰ã€‚"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Nodes To Floor"
@@ -7512,31 +7520,31 @@ msgstr "å˜æ¢å¯¹è¯æ¡†..."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "1 Viewport"
-msgstr "1个视å£"
+msgstr "1 个视å£"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports"
-msgstr "2个视å£"
+msgstr "2 个视å£"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports (Alt)"
-msgstr "2个视å£ï¼ˆå¤‡é€‰ï¼‰"
+msgstr "2 个视å£ï¼ˆå¤‡é€‰ï¼‰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports"
-msgstr "3个视å£"
+msgstr "3 个视å£"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports (Alt)"
-msgstr "3个视å£ï¼ˆå¤‡é€‰ï¼‰"
+msgstr "3 个视å£ï¼ˆå¤‡é€‰ï¼‰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "4 Viewports"
-msgstr "4个视å£"
+msgstr "4 个视å£"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Gizmos"
-msgstr "控制器"
+msgstr "Gizmo"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
@@ -7577,11 +7585,11 @@ msgstr "é€è§†è§†è§’(角度):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
-msgstr "查看Z-Near:"
+msgstr "查看 Z-Near:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
-msgstr "查看Z-Far:"
+msgstr "查看 Z-Far:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
@@ -7617,35 +7625,35 @@ msgstr "æ— å控制器"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
-msgstr "创建Mesh2D"
+msgstr "创建 Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Mesh2D Preview"
-msgstr "Mesh2D预览"
+msgstr "Mesh2D 预览"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Polygon2D"
-msgstr "创建Polygon 2D"
+msgstr "创建 Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Polygon2D Preview"
-msgstr "Polygon2D预览"
+msgstr "Polygon2D 预览"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create CollisionPolygon2D"
-msgstr "创建CollisionPolygon2D"
+msgstr "创建 CollisionPolygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "CollisionPolygon2D Preview"
-msgstr "CollisionPolygon2D预览"
+msgstr "CollisionPolygon2D 预览"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create LightOccluder2D"
-msgstr "创建LightOccluder2D"
+msgstr "创建 LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "LightOccluder2D Preview"
-msgstr "LightOccluder2D预览"
+msgstr "LightOccluder2D 预览"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
@@ -7653,7 +7661,7 @@ msgstr "Sprite 是空的ï¼"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Can't convert a sprite using animation frames to mesh."
-msgstr "无法将使用动画帧的精çµè½¬æ¢ä¸ºç½‘格。"
+msgstr "无法将使用动画帧将精çµè½¬æ¢ä¸ºç½‘格。"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't replace by mesh."
@@ -7661,7 +7669,7 @@ msgstr "无效的几何体,无法使用网格替æ¢ã€‚"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Convert to Mesh2D"
-msgstr "转æ¢ä¸ºMesh2D"
+msgstr "转æ¢ä¸º Mesh2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create polygon."
@@ -7669,7 +7677,7 @@ msgstr "无效的几何体,无法创建多边形。"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Convert to Polygon2D"
-msgstr "转æ¢ä¸ºPolygon2D"
+msgstr "转æ¢ä¸º Polygon2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create collision polygon."
@@ -7677,7 +7685,7 @@ msgstr "无效的几何体,无法创建多边形碰撞体。"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create CollisionPolygon2D Sibling"
-msgstr "创建CollisionPolygon2D兄弟节点"
+msgstr "创建 CollisionPolygon2D 兄弟节点"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Invalid geometry, can't create light occluder."
@@ -7685,7 +7693,7 @@ msgstr "无效的几何体,无法创建é®å…‰ä½“。"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create LightOccluder2D Sibling"
-msgstr "创建LightOccluder2D兄弟节点"
+msgstr "创建 LightOccluder2D 兄弟节点"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite"
@@ -7717,7 +7725,7 @@ msgstr "未选择帧"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add %d Frame(s)"
-msgstr "添加%d帧"
+msgstr "添加 %d 帧"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frame"
@@ -7745,7 +7753,7 @@ msgstr "添加空白帧"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr "修改动画FPS"
+msgstr "修改动画 FPS"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
@@ -7817,7 +7825,7 @@ msgstr "选择/清除所有帧"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Create Frames from Sprite Sheet"
-msgstr "从 Sprite Sheet 中创建帧"
+msgstr "从精çµè¡¨ä¸­åˆ›å»ºå¸§"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "SpriteFrames"
@@ -7833,7 +7841,7 @@ msgstr "设置边è·"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
-msgstr "å¸é™„模å¼:"
+msgstr "å¸é™„模å¼ï¼š"
#: editor/plugins/texture_region_editor_plugin.cpp
#: scene/resources/visual_shader.cpp
@@ -7854,7 +7862,7 @@ msgstr "自动è£å‰ª"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Offset:"
-msgstr "网格å移é‡:"
+msgstr "å移é‡ï¼š"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "Step:"
@@ -7922,7 +7930,7 @@ msgstr "ä¸å¯ç”¨çš„按钮"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Item"
-msgstr "项目(Item)"
+msgstr "项目"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Disabled Item"
@@ -7930,11 +7938,11 @@ msgstr "ä¸å¯ç”¨çš„项目"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Check Item"
-msgstr "检查项目(Item)"
+msgstr "检查项目"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr "已选项目(Checked Item)"
+msgstr "已选项目"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Radio Item"
@@ -7946,47 +7954,47 @@ msgstr "已选å•é€‰é¡¹ç›®"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Named Sep."
-msgstr "命å为 Sep。"
+msgstr "带å称的分隔线"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Submenu"
-msgstr "å­èœå•(Submenu)"
+msgstr "å­èœå•"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Subitem 1"
-msgstr "å­é¡¹ç›®1"
+msgstr "å­é¡¹ç›® 1"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Subitem 2"
-msgstr "å­é¡¹ç›®2"
+msgstr "å­é¡¹ç›® 2"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has"
-msgstr "有(Has)"
+msgstr "有"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Many"
-msgstr "许多(Many)"
+msgstr "许多"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Disabled LineEdit"
-msgstr "行编辑ä¸å¯ç”¨"
+msgstr "å·²ç¦ç”¨ LineEdit"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 1"
-msgstr "分页1"
+msgstr "é€‰é¡¹å¡ 1"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 2"
-msgstr "分页2"
+msgstr "é€‰é¡¹å¡ 2"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Tab 3"
-msgstr "分页3"
+msgstr "é€‰é¡¹å¡ 3"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Editable Item"
-msgstr "å¯ç¼–辑节点"
+msgstr "å¯ç¼–辑的项目"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Subtree"
@@ -7994,11 +8002,11 @@ msgstr "å­æ ‘"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Has,Many,Options"
-msgstr "有,很多,选项"
+msgstr "有, 很多, 选项"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Data Type:"
-msgstr "æ•°æ®ç±»åž‹:"
+msgstr "æ•°æ®ç±»åž‹ï¼š"
#: editor/plugins/theme_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp
@@ -8083,21 +8091,20 @@ msgid "Paint Tile"
msgstr "绘制图å—"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
-"Shift+鼠标左键:绘制直线\n"
-"Shift+Ctrl+鼠标左键:绘制矩形"
+"Shift + 鼠标左键:绘制直线\n"
+"Shift + Command + 鼠标左键:绘制矩形"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Ctrl+LMB: Rectangle Paint"
msgstr ""
-"Shift+鼠标左键:绘制直线\n"
-"Shift+Ctrl+鼠标左键:绘制矩形"
+"Shift + 鼠标左键:绘制直线\n"
+"Shift + Ctrl + 鼠标左键:绘制矩形"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -8193,7 +8200,7 @@ msgstr "优先级"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Z Index"
-msgstr "Z索引"
+msgstr "Z 索引"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Region Mode"
@@ -8225,7 +8232,7 @@ msgstr "图标模å¼"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Z Index Mode"
-msgstr "Z索引模å¼"
+msgstr "Z 索引模å¼"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Copy bitmask."
@@ -8241,7 +8248,7 @@ msgstr "擦除ä½æŽ©ç ã€‚"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create a new rectangle."
-msgstr "新建矩形。"
+msgstr "创建新矩形。"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Create a new polygon."
@@ -8253,7 +8260,7 @@ msgstr "ä¿æŒå¤šè¾¹å½¢ä½äºŽçº¹ç†åŒºåŸŸä¸­ã€‚"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Enable snap and show grid (configurable via the Inspector)."
-msgstr "å¯ç”¨å¸é™„并显示网格(å¯é€šè¿‡å±žæ€§é¢æ¿è®¾ç½®ï¼‰ã€‚"
+msgstr "å¯ç”¨å¸é™„并显示网格(å¯é€šè¿‡å±žæ€§æ£€æŸ¥å™¨è®¾ç½®ï¼‰ã€‚"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Display Tile Names (Hold Alt Key)"
@@ -8286,7 +8293,7 @@ msgstr "删除纹ç†"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "%s file(s) were not added because was already on the list."
-msgstr "%s 文件没有被添加,因为已添加在列表中。"
+msgstr "因为有 %s 个文件已添加在列表中,所以没有被添加。"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
@@ -8298,7 +8305,7 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Delete selected Rect."
-msgstr "删除选中的Rect。"
+msgstr "删除选中矩形。"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid ""
@@ -8321,7 +8328,7 @@ msgid ""
msgstr ""
"鼠标左键:å¯ç”¨æ¯”特。\n"
"é¼ æ ‡å³é”®ï¼šå…³é—­æ¯”特。\n"
-"Shift+鼠标左键:设置通é…符ä½ã€‚\n"
+"Shift + 鼠标左键:设置通é…符ä½ã€‚\n"
"点击å¦ä¸€ä¸ªå›¾å—进行编辑。"
#: editor/plugins/tile_set_editor_plugin.cpp
@@ -8443,7 +8450,7 @@ msgstr "图å—集"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No VCS addons are available."
-msgstr "没有å¯ç”¨çš„VCSæ’件。"
+msgstr "没有å¯ç”¨çš„ VCS æ’件。"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -8463,7 +8470,7 @@ msgstr "æ交"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "VCS Addon is not initialized"
-msgstr "VCSæ’件未åˆå§‹åŒ–"
+msgstr "VCS æ’件未åˆå§‹åŒ–"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -8536,7 +8543,7 @@ msgstr "检测文件差异的å˜åŒ–"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(GLES3 only)"
-msgstr "åªä½¿ç”¨GLES3"
+msgstr "ï¼ˆä»…é™ GLES3)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add Output"
@@ -8548,7 +8555,7 @@ msgstr "æ ‡é‡"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vector"
-msgstr "Vector"
+msgstr "矢é‡"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Boolean"
@@ -8556,7 +8563,7 @@ msgstr "布尔值"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Sampler"
-msgstr "采样(Sampler)"
+msgstr "采样 Sampler"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add input port"
@@ -8596,7 +8603,7 @@ msgstr "设置表达å¼"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Resize VisualShader node"
-msgstr "调整å¯è§†ç€è‰²å™¨èŠ‚点"
+msgstr "调整 VisualShader 节点大å°"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Set Uniform Name"
@@ -8611,7 +8618,6 @@ msgid "Add Node to Visual Shader"
msgstr "将节点添加到å¯è§†ç€è‰²å™¨"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
msgstr "节点已移动"
@@ -8633,9 +8639,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "å¯è§†ç€è‰²å™¨è¾“入类型已更改"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "设置统一å称"
+msgstr "已更改 UniformRef çš„å称"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -8671,11 +8676,11 @@ msgstr "ç°åº¦å‡½æ•°ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Converts HSV vector to RGB equivalent."
-msgstr "å°†HSVå‘é‡è½¬æ¢ä¸ºç­‰æ•ˆçš„RGBå‘é‡ã€‚"
+msgstr "å°† HSV å‘é‡è½¬æ¢ä¸ºç­‰æ•ˆçš„ RGB å‘é‡ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Converts RGB vector to HSV equivalent."
-msgstr "å°†RGBå‘é‡è½¬æ¢ä¸ºç­‰æ•ˆçš„HSVå‘é‡ã€‚"
+msgstr "å°† RGB å‘é‡è½¬æ¢ä¸ºç­‰æ•ˆçš„ HSV å‘é‡ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Sepia function."
@@ -8731,15 +8736,15 @@ msgstr "返回两个å‚数之间 %s 比较的布尔结果。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Equal (==)"
-msgstr "等于(==)"
+msgstr "等于 (==)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than (>)"
-msgstr "大于(>)"
+msgstr "大于 (>)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than or Equal (>=)"
-msgstr "大于或等于(> =)"
+msgstr "大于或等于 (>=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -8751,35 +8756,35 @@ msgstr "如果æ供的标é‡ç›¸ç­‰ï¼Œæ›´å¤§æˆ–æ›´å°ï¼Œåˆ™è¿”回关è”çš„å‘é‡
msgid ""
"Returns the boolean result of the comparison between INF and a scalar "
"parameter."
-msgstr "返回INF和标é‡å‚数之间比较的布尔结果。"
+msgstr "返回 INF 和标é‡å‚数之间比较的布尔结果。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns the boolean result of the comparison between NaN and a scalar "
"parameter."
-msgstr "返回NaN和标é‡å‚数之间比较的布尔结果。"
+msgstr "返回 NaN 和标é‡å‚数之间比较的布尔结果。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than (<)"
-msgstr "å°äºŽ (<)"
+msgstr "å°äºŽ (<)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than or Equal (<=)"
-msgstr "å°äºŽæˆ–等于(<=)"
+msgstr "å°äºŽæˆ–等于 (<=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Not Equal (!=)"
-msgstr "ä¸ç­‰äºŽï¼ˆ!=)"
+msgstr "ä¸ç­‰äºŽ (!=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns an associated vector if the provided boolean value is true or false."
-msgstr "如果æ供的布尔值是true或false,则返回关è”çš„å‘é‡ã€‚"
+msgstr "如果æ供的布尔值是 true 或 false,则返回关è”çš„å‘é‡ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"Returns an associated scalar if the provided boolean value is true or false."
-msgstr "如果æ供的布尔值是true或false,则返回关è”çš„æ ‡é‡ã€‚"
+msgstr "如果æ供的布尔值是 true 或 false,则返回关è”çš„æ ‡é‡ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the boolean result of the comparison between two parameters."
@@ -8801,7 +8806,7 @@ msgstr "布尔统一。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for all shader modes."
-msgstr "“%sâ€ä¸ºæ‰€æœ‰ç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "所有ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Input parameter."
@@ -8809,27 +8814,27 @@ msgstr "输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex and fragment shader modes."
-msgstr "“%sâ€ä¸ºé¡¶ç‚¹å’Œç‰‡æ®µç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "顶点和片段ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for fragment and light shader modes."
-msgstr "“%sâ€ä¸ºç‰‡æ®µå’Œç¯å…‰ç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "片段和ç¯å…‰ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for fragment shader mode."
-msgstr "“%sâ€ä¸ºç‰‡æ®µç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "片段ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for light shader mode."
-msgstr "“%sâ€ä¸ºç¯å…‰ç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "ç¯å…‰ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex shader mode."
-msgstr "“%sâ€ä¸ºé¡¶ç‚¹ç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "顶点ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "'%s' input parameter for vertex and fragment shader mode."
-msgstr "“%sâ€ä¸ºé¡¶ç‚¹å’Œç‰‡æ®µç€è‰²å™¨æ¨¡å¼çš„输入å‚数。"
+msgstr "顶点和片段ç€è‰²å™¨æ¨¡å¼çš„ “%s†输入å‚数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Scalar function."
@@ -8841,35 +8846,35 @@ msgstr "æ ‡é‡è¿ç®—符。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "E constant (2.718282). Represents the base of the natural logarithm."
-msgstr "E常数(2.718282)。表示自然对数的基数。"
+msgstr "E 常数 (2.718282)。表示自然对数的基数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Epsilon constant (0.00001). Smallest possible scalar number."
-msgstr "Epsilon常数(0.00001)。最å°çš„æ ‡é‡æ•°ã€‚"
+msgstr "ε (eplison) 常数 (0.00001)。最å°çš„æ ‡é‡æ•°ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Phi constant (1.618034). Golden ratio."
-msgstr "Phi常数(1.618034)。黄金比例。"
+msgstr "Φ (Phi) 常数 (1.618034)。黄金比例。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Pi/4 constant (0.785398) or 45 degrees."
-msgstr "Pi / 4常数(0.785398)或45度。"
+msgstr "π (Pi)/4 常数 (0.785398) 或 45 度。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Pi/2 constant (1.570796) or 90 degrees."
-msgstr "Pi/2常数(1.570796)或90度。"
+msgstr "π (Pi)/2 常数 (1.570796) 或 90 度。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Pi constant (3.141593) or 180 degrees."
-msgstr "Pi 常数 (3.141593) 或 180 度。"
+msgstr "π (Pi) 常数 (3.141593) 或 180 度。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Tau constant (6.283185) or 360 degrees."
-msgstr "Tau常数(6.283185)或360度。"
+msgstr "τ (Tau) 常数 (6.283185)或 360 度。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Sqrt2 constant (1.414214). Square root of 2."
-msgstr "Sqrt2 常数 (1.414214)。2 的平方根。"
+msgstr "Sqrt2 常数 (1.414214)。2 的平方根。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the absolute value of the parameter."
@@ -8926,11 +8931,11 @@ msgstr "将以弧度为å•ä½çš„é‡è½¬æ¢ä¸ºåº¦ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Base-e Exponential."
-msgstr "以e为底的指数。"
+msgstr "以 e 为底的指数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Base-2 Exponential."
-msgstr "2为底的指数。"
+msgstr "以 2 为底的指数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Finds the nearest integer less than or equal to the parameter."
@@ -8950,7 +8955,7 @@ msgstr "自然对数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Base-2 logarithm."
-msgstr "2为底的对数。"
+msgstr "以 2 为底的对数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the greater of two values."
@@ -9021,10 +9026,10 @@ msgid ""
"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
"using Hermite polynomials."
msgstr ""
-"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n"
+"SmoothStep 函数( scalar(edge0), scalar(edge1), scalar(x) ).\n"
"\n"
-"如果'x'å°äºŽ'edge0'则返回0.0,如果x大于'edge1'则返回1.0。å¦åˆ™åœ¨0.0å’Œ1.0之间返"
-"回Hermite多项å¼æ’值的值。"
+"如果 “x†å°äºŽ “edge0†则返回 0.0,如果 x 大于 “edge1†则返回 1.0。å¦åˆ™åœ¨ 0.0 "
+"å’Œ 1.0 之间返回埃尔米特多项å¼æ’值的值。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9032,9 +9037,9 @@ msgid ""
"\n"
"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
msgstr ""
-"Step function( scalar(edge), scalar(x) ).\n"
+"Step 函数( scalar(edge), scalar(x) ).\n"
"\n"
-"如果'x'å°äºŽ'edge'则返回0.0,å¦åˆ™è¿”回1.0。"
+"如果 “x†å°äºŽ “edge†则返回 0.0,å¦åˆ™è¿”回 1.0。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Returns the tangent of the parameter."
@@ -9112,9 +9117,9 @@ msgid ""
msgstr ""
"计算一对矢é‡çš„外积。\n"
"\n"
-"OuterProduct 将第一个å‚æ•°\"c\"视为列矢é‡ï¼ˆåŒ…å«ä¸€åˆ—的矩阵),将第二个å‚æ•°\"r"
-"\"视为行矢é‡ï¼ˆå…·æœ‰ä¸€è¡Œçš„矩阵),并执行线性代数矩阵乘以\"c * r\",生æˆè¡Œæ•°ä¸º"
-"\"c\"中的组件,其列数是\"r\"中的组件数。"
+"OuterProduct 将第一个å‚æ•° “c†视为列矢é‡ï¼ˆåŒ…å«ä¸€åˆ—的矩阵),将第二个å‚æ•° “r†"
+"视为行矢é‡ï¼ˆå…·æœ‰ä¸€è¡Œçš„矩阵),并执行线性代数矩阵乘以 “c * râ€ï¼Œç”Ÿæˆè¡Œæ•°ä¸º “c†"
+"中的组件,其列数是 “r†中的组件数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Composes transform from four vectors."
@@ -9187,8 +9192,8 @@ msgid ""
"incident vector, and Nref, the reference vector. If the dot product of I and "
"Nref is smaller than zero the return value is N. Otherwise -N is returned."
msgstr ""
-"返回指å‘与å‚考å‘é‡ç›¸åŒæ–¹å‘çš„å‘é‡ã€‚该函数有三个å‘é‡å‚数:N,方å‘å‘é‡ï¼ŒI,入射"
-"å‘é‡ï¼ŒNref,å‚考å‘é‡ã€‚如果Iå’ŒNref的点乘å°äºŽé›¶ï¼Œè¿”回值为n,å¦åˆ™è¿”回-N。"
+"返回指å‘与å‚考å‘é‡ç›¸åŒæ–¹å‘çš„å‘é‡ã€‚该函数有三个å‘é‡å‚数:N,方å‘å‘é‡ï¼›I,入射"
+"å‘é‡ï¼›Nref,å‚考å‘é‡ã€‚如果 I å’Œ Nref 的点乘å°äºŽé›¶ï¼Œè¿”回值为 N,å¦åˆ™è¿”回 -N。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Calculates the length of a vector."
@@ -9232,10 +9237,10 @@ msgid ""
"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
"using Hermite polynomials."
msgstr ""
-"SmoothStep 函数(矢é‡ï¼ˆedge0)ã€çŸ¢é‡ï¼ˆedge1)ã€çŸ¢é‡ï¼ˆx))。 \n"
+"SmoothStep 函数( vector(edge0), vector(edge1), vector (x) )。 \n"
"\n"
-"如果\"x\"å°äºŽ\"edge0\",则返回 0.0;如果\"x\"大于\"edge1\",则返回 0.0。å¦åˆ™ï¼Œ"
-"返回值将使用赫密特多项å¼åœ¨ 0.0 å’Œ 1.0 之间æ’值。"
+"如果 “x†å°äºŽ “edge0â€ï¼Œåˆ™è¿”回 0.0;如果 “x†大于 “edge1â€ï¼Œåˆ™è¿”回 0.0。å¦åˆ™ï¼Œ"
+"返回值将使用埃尔米特多项å¼åœ¨ 0.0 å’Œ 1.0 之间æ’值。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9245,10 +9250,10 @@ msgid ""
"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
"using Hermite polynomials."
msgstr ""
-"smoothstep函数(标é‡ï¼ˆedge0)ã€æ ‡é‡ï¼ˆedge1)ã€å‘é‡ï¼ˆx))。\n"
+"SmoothStep 函数( scalar(edge0), scalar(edge1), vector(x) )。\n"
"\n"
-"如果'x'å°äºŽ'edge0'则返回0.0,如果x大于'edge1'则返回1.0。å¦åˆ™åœ¨0.0å’Œ1.0之间返"
-"回Hermite多项å¼æ’值的值。"
+"如果 “x†å°äºŽ “edge0†则返回 0.0,如果 x 大于 “edge1†则返回 1.0。å¦åˆ™ï¼Œè¿”回"
+"值将使用埃尔米特多项å¼åœ¨ 0.0 å’Œ 1.0 之间æ’值。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9256,9 +9261,9 @@ msgid ""
"\n"
"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
msgstr ""
-"Step function( scalar(edge), scalar(x) ).\n"
+"Step 函数( scalar(edge), scalar(x) )。\n"
"\n"
-"如果'x'å°äºŽ'edge'则返回0.0,å¦åˆ™è¿”回1.0。"
+"如果 “x†å°äºŽ “edge†则返回 0.0,å¦åˆ™è¿”回 1.0。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9266,9 +9271,9 @@ msgid ""
"\n"
"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
msgstr ""
-"Step function( scalar(edge), scalar(x) ).\n"
+"Step 函数( scalar(edge), scalar(x) )。\n"
"\n"
-"如果'x'å°äºŽ'edge'则返回0.0,å¦åˆ™è¿”回1.0。"
+"如果 “x†å°äºŽ “edge†则返回 0.0,å¦åˆ™è¿”回 1.0。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Adds vector to vector."
@@ -9304,8 +9309,8 @@ msgid ""
"output ports. This is a direct injection of code into the vertex/fragment/"
"light function, do not use it to write the function declarations inside."
msgstr ""
-"自定义Godotç€è‰²å™¨è¯­è¨€è¡¨è¾¾å¼ï¼Œå¯ä»¥æœ‰ä»»æ„æ•°é‡çš„输入和输出端å£ã€‚它会往顶点/片段/"
-"ç¯å…‰å‡½æ•°ä¸­ç›´æŽ¥æ³¨å…¥ä»£ç ï¼Œè¯·å‹¿åœ¨å…¶ä¸­å£°æ˜Žå‡½æ•°ã€‚"
+"自定义 Godot ç€è‰²å™¨è¯­è¨€è¡¨è¾¾å¼ï¼Œå¯ä»¥æœ‰ä»»æ„æ•°é‡çš„输入和输出端å£ã€‚它会往顶点/片"
+"段/ç¯å…‰å‡½æ•°ä¸­ç›´æŽ¥æ³¨å…¥ä»£ç ï¼Œè¯·å‹¿åœ¨å…¶ä¸­å£°æ˜Žå‡½æ•°ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9325,7 +9330,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "至现有一致的引用。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -9339,7 +9344,7 @@ msgstr "(仅é™ç‰‡æ®µ/ç¯å…‰æ¨¡å¼ï¼‰çŸ¢é‡å¯¼æ•°åŠŸèƒ½ã€‚"
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
"differencing."
-msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆçŸ¢é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„“ xâ€ä¸­çš„导数。"
+msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆçŸ¢é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„ “x†中的导数。"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -9363,13 +9368,13 @@ msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰ä½¿ç”¨å±€éƒ¨å·®åˆ†çš„'y'导æ•
msgid ""
"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
"'y'."
-msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆå‘é‡ï¼‰â€œ xâ€å’Œâ€œ yâ€ä¸­çš„ç»å¯¹å¯¼æ•°ä¹‹å’Œã€‚"
+msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆå‘é‡ï¼‰â€œx†和 “y†中的ç»å¯¹å¯¼æ•°ä¹‹å’Œã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
"'y'."
-msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰â€œ xâ€å’Œâ€œ yâ€ä¸­çš„ç»å¯¹å¯¼æ•°ä¹‹å’Œã€‚"
+msgstr "(仅é™ç‰‡æ®µ/光照模å¼ï¼‰ï¼ˆæ ‡é‡ï¼‰â€œx†和 “y†中的ç»å¯¹å¯¼æ•°ä¹‹å’Œã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
@@ -9389,14 +9394,14 @@ msgstr "å¯æ‰§è¡Œçš„"
#: editor/project_export.cpp
msgid "Delete preset '%s'?"
-msgstr "是å¦åˆ é™¤é¢„设“%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"
+"æ— æ³•ä¸ºå¹³å° â€œ%s†导出项目。\n"
"导出模æ¿ä¼¼ä¹Žç¼ºå¤±æˆ–无效。"
#: editor/project_export.cpp
@@ -9405,7 +9410,7 @@ msgid ""
"This might be due to a configuration issue in the export preset or your "
"export settings."
msgstr ""
-"无法导出平å°â€œï¼…sâ€çš„项目。\n"
+"æ— æ³•ä¸ºå¹³å° â€œï¼…s†导出项目。\n"
"原因å¯èƒ½æ˜¯å¯¼å‡ºé¢„设或导出设置内的é…置有问题。"
#: editor/project_export.cpp
@@ -9518,11 +9523,11 @@ msgstr "加密(在下é¢æ供密钥)"
#: editor/project_export.cpp
msgid "Invalid Encryption Key (must be 64 characters long)"
-msgstr "无效的加密密钥(长度必须为64个字符)"
+msgstr "无效的加密密钥(长度必须为 64 个字符)"
#: editor/project_export.cpp
msgid "Script Encryption Key (256-bits as hex):"
-msgstr "脚本加密密钥(256ä½16进制ç ï¼‰:"
+msgstr "脚本加密密钥(256 ä½ 16 进制ç ï¼‰:"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -9546,7 +9551,7 @@ msgstr "ZIP 文件"
#: editor/project_export.cpp
msgid "Godot Game Pack"
-msgstr "Godot游æˆåŒ…"
+msgstr "Godot 游æˆåŒ…"
#: editor/project_export.cpp
msgid "Export templates for this platform are missing:"
@@ -9566,12 +9571,12 @@ msgstr "指定的路径ä¸å­˜åœ¨ã€‚"
#: editor/project_manager.cpp
msgid "Error opening package file (it's not in ZIP format)."
-msgstr "打开包文件时出错(éžZIPæ ¼å¼ï¼‰ã€‚"
+msgstr "æ‰“å¼€åŒ…æ–‡ä»¶æ—¶å‡ºé”™ï¼ˆéž ZIP æ ¼å¼ï¼‰ã€‚"
#: editor/project_manager.cpp
msgid ""
"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
-msgstr "无效的“.zipâ€é¡¹ç›®æ–‡ä»¶ï¼›æ²¡æœ‰åŒ…å«â€œproject.godotâ€æ–‡ä»¶ã€‚"
+msgstr "无效的 “.zipâ€ é¡¹ç›®æ–‡ä»¶ã€‚æ²¡æœ‰åŒ…å« â€œproject.godot†文件。"
#: editor/project_manager.cpp
msgid "Please choose an empty folder."
@@ -9579,11 +9584,11 @@ msgstr "请选择空文件夹。"
#: editor/project_manager.cpp
msgid "Please choose a \"project.godot\" or \".zip\" file."
-msgstr "请选择“project.godotâ€æˆ–“.zipâ€æ–‡ä»¶ã€‚"
+msgstr "请选择 “project.godot†或 “.zip†文件。"
#: editor/project_manager.cpp
msgid "This directory already contains a Godot project."
-msgstr "该目录已ç»åŒ…å«Godot项目。"
+msgstr "该目录已ç»åŒ…å« Godot 项目。"
#: editor/project_manager.cpp
msgid "New Game Project"
@@ -9607,7 +9612,7 @@ msgstr "该路径中已存在åŒå文件夹。"
#: editor/project_manager.cpp
msgid "It would be a good idea to name your project."
-msgstr "为项目命å是一个好主æ„。"
+msgstr "最好为项目起个å字。"
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
@@ -9622,11 +9627,11 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Couldn't edit project.godot in project path."
-msgstr "无法在项目路径下编辑project.godot文件。"
+msgstr "无法在项目路径下编辑 project.godot 文件。"
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
-msgstr "无法在项目路径下创建project.godot文件。"
+msgstr "无法在项目路径下创建 project.godot 文件。"
#: editor/project_manager.cpp
msgid "Rename Project"
@@ -9650,7 +9655,7 @@ msgstr "创建并编辑"
#: editor/project_manager.cpp
msgid "Install Project:"
-msgstr "安装项目:"
+msgstr "安装项目:"
#: editor/project_manager.cpp
msgid "Install & Edit"
@@ -9740,12 +9745,12 @@ msgid ""
"Warning: You won't be able to open the project with previous versions of the "
"engine anymore."
msgstr ""
-"以下项目设置文件未指定创建它的Godot版本。\n"
+"以下项目设置文件未指定创建它的 Godot 版本。\n"
"\n"
"%s\n"
"\n"
-"如果继续打开,它将转æ¢ä¸ºGodot的当å‰é…置文件格å¼ã€‚\n"
-"警告:你将无法å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开项目。"
+"如果继续打开,该项目会转æ¢ä¸º Godot 当å‰çš„é…置文件格å¼ã€‚\n"
+"警告:将无法å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开该项目。"
#: editor/project_manager.cpp
msgid ""
@@ -9758,18 +9763,18 @@ msgid ""
"Warning: You won't be able to open the project with previous versions of the "
"engine anymore."
msgstr ""
-"以下项目设置文件由较旧的引擎版本生æˆï¼Œéœ€è¦ä¸ºæ­¤ç‰ˆæœ¬è¿›è¡Œè½¬æ¢ï¼š\n"
+"以下项目设置文件由较旧版本的引擎生æˆï¼Œéœ€è¦ä¸ºæ­¤ç‰ˆæœ¬è¿›è¡Œè½¬æ¢ï¼š\n"
"\n"
"%s\n"
"\n"
"是å¦è¦è½¬æ¢ï¼Ÿ\n"
-"警告: 您将无法å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开项目。"
+"警告: 将无法å†ä½¿ç”¨ä»¥å‰ç‰ˆæœ¬çš„引擎打开该项目。"
#: editor/project_manager.cpp
msgid ""
"The project settings were created by a newer engine version, whose settings "
"are not compatible with this version."
-msgstr "项目设置是由更新的引擎版本创建的,其设置与此版本ä¸å…¼å®¹ã€‚"
+msgstr "项目设置是由较新版本的引擎创建的,其设置与此版本ä¸å…¼å®¹ã€‚"
#: editor/project_manager.cpp
msgid ""
@@ -9778,7 +9783,7 @@ msgid ""
"the \"Application\" category."
msgstr ""
"无法è¿è¡Œé¡¹ç›®ï¼šæœªå®šä¹‰ä¸»åœºæ™¯ã€‚ \n"
-"请编辑项目并在“应用程åºâ€ç±»åˆ«ä¸‹çš„“项目设置â€ä¸­è®¾ç½®ä¸»åœºæ™¯ã€‚"
+"请编辑项目并在 “项目设置†中 “Application†类别下设置主场景。"
#: editor/project_manager.cpp
msgid ""
@@ -9786,18 +9791,18 @@ msgid ""
"Please edit the project to trigger the initial import."
msgstr ""
"无法è¿è¡Œé¡¹ç›®ï¼š 需è¦å¯¼å…¥ç´ æ。\n"
-"请编辑项目,从而触å‘首次导入。"
+"请编辑项目æ¥è§¦å‘首次导入。"
#: editor/project_manager.cpp
msgid "Are you sure to run %d projects at once?"
-msgstr "您确定è¦åŒæ—¶è¿è¡Œ%d个项目å—?"
+msgstr "确定è¦åŒæ—¶è¿è¡Œ %d 个项目å—?"
#: editor/project_manager.cpp
msgid ""
"Remove %d projects from the list?\n"
"The project folders' contents won't be modified."
msgstr ""
-"是å¦ä»Žåˆ—表中删除%d个项目? \n"
+"是å¦ä»Žåˆ—表中删除 %d 个项目? \n"
"项目文件夹的内容ä¸ä¼šè¢«ä¿®æ”¹ã€‚"
#: editor/project_manager.cpp
@@ -9829,7 +9834,7 @@ msgid ""
"Are you sure to scan %s folders for existing Godot projects?\n"
"This could take a while."
msgstr ""
-"您确定è¦æ‰«æ%s文件夹中的现有Godot项目å—? \n"
+"确定è¦æ‰«æ文件夹 %s 中的现有 Godot 项目å—? \n"
"è¿™å¯èƒ½éœ€è¦ä¸€æ®µæ—¶é—´ã€‚"
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
@@ -9878,7 +9883,7 @@ msgid ""
"You currently don't have any projects.\n"
"Would you like to explore official example projects in the Asset Library?"
msgstr ""
-"ä½ ç›®å‰æ²¡æœ‰ä»»ä½•é¡¹ç›®ã€‚ \n"
+"ç›®å‰æ²¡æœ‰ä»»ä½•é¡¹ç›®ã€‚ \n"
"是å¦æŸ¥çœ‹ç´ æ库中的官方示例项目?"
#: editor/project_manager.cpp
@@ -9910,12 +9915,11 @@ msgstr "鼠标按键"
msgid ""
"Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or "
"'\"'"
-msgstr ""
-"无效的æ“作å称。æ“作åä¸èƒ½ä¸ºç©ºï¼Œä¹Ÿä¸èƒ½åŒ…å« '/', ':', '=', '\\' 或者空字符串"
+msgstr "无效的æ“作å称。æ“作åä¸èƒ½ä¸ºç©ºï¼Œä¹Ÿä¸èƒ½åŒ…å« â€œ/â€, “:â€, “=â€, “\\†或 “\"â€"
#: editor/project_settings_editor.cpp
msgid "An action with the name '%s' already exists."
-msgstr "å为'%s'çš„æ“作已存在。"
+msgstr "å为 “%s†的æ“作已存在。"
#: editor/project_settings_editor.cpp
msgid "Rename Input Action Event"
@@ -9983,7 +9987,7 @@ msgstr "X 按键 2"
#: editor/project_settings_editor.cpp
msgid "Joypad Axis Index:"
-msgstr "手柄摇æ†åºå·:"
+msgstr "手柄摇æ†åºå·ï¼š"
#: editor/project_settings_editor.cpp
msgid "Axis"
@@ -10039,11 +10043,11 @@ msgstr "请先选择一个设置项目 ï¼"
#: editor/project_settings_editor.cpp
msgid "No property '%s' exists."
-msgstr "ä¸å­˜åœ¨å±žæ€§ '%s'。"
+msgstr "ä¸å­˜åœ¨å±žæ€§ “%sâ€ã€‚"
#: editor/project_settings_editor.cpp
msgid "Setting '%s' is internal, and it can't be deleted."
-msgstr "“%sâ€æ˜¯å†…部设定,无法删除。"
+msgstr "“%s†是内部设定,无法删除。"
#: editor/project_settings_editor.cpp
msgid "Delete Item"
@@ -10053,7 +10057,8 @@ msgstr "删除æ¡ç›®"
msgid ""
"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
"'\"'."
-msgstr "无效的æ“作å称。它ä¸èƒ½æ˜¯ç©ºçš„也ä¸èƒ½åŒ…å« '/', ':', '=', '\\' 或者 '\"'。"
+msgstr ""
+"无效的æ“作å称。å称ä¸èƒ½ä¸ºç©ºï¼Œä¹Ÿä¸èƒ½åŒ…å« â€œ/â€, “:â€, “=â€, “\\†或者 “\"â€ã€‚"
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
@@ -10077,11 +10082,11 @@ msgstr "é‡å†™åŠŸèƒ½"
#: editor/project_settings_editor.cpp
msgid "Add Translation"
-msgstr "添加语言"
+msgstr "添加翻译"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
-msgstr "移除语言"
+msgstr "移除翻译"
#: editor/project_settings_editor.cpp
msgid "Add Remapped Path"
@@ -10093,7 +10098,7 @@ msgstr "添加资æºé‡å®šå‘"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
-msgstr "修改语言资æºé‡å®šå‘"
+msgstr "修改资æºé‡å®šå‘语言"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
@@ -10145,11 +10150,11 @@ msgstr "盲区"
#: editor/project_settings_editor.cpp
msgid "Device:"
-msgstr "设备:"
+msgstr "设备:"
#: editor/project_settings_editor.cpp
msgid "Index:"
-msgstr "åºå·:"
+msgstr "åºå·ï¼š"
#: editor/project_settings_editor.cpp
msgid "Localization"
@@ -10157,11 +10162,11 @@ msgstr "本地化"
#: editor/project_settings_editor.cpp
msgid "Translations"
-msgstr "语言"
+msgstr "翻译"
#: editor/project_settings_editor.cpp
msgid "Translations:"
-msgstr "语言:"
+msgstr "翻译:"
#: editor/project_settings_editor.cpp
msgid "Remaps"
@@ -10173,7 +10178,7 @@ msgstr "资æºï¼š"
#: editor/project_settings_editor.cpp
msgid "Remaps by Locale:"
-msgstr "地区é‡å®šå‘:"
+msgstr "ä¾ç…§åŒºåŸŸé‡å®šå‘:"
#: editor/project_settings_editor.cpp
msgid "Locale"
@@ -10181,15 +10186,15 @@ msgstr "区域"
#: editor/project_settings_editor.cpp
msgid "Locales Filter"
-msgstr "区域筛选器"
+msgstr "筛选区域"
#: editor/project_settings_editor.cpp
msgid "Show All Locales"
-msgstr "显示所有语言设置"
+msgstr "显示所有区域"
#: editor/project_settings_editor.cpp
msgid "Show Selected Locales Only"
-msgstr "仅显示选定的语言环境"
+msgstr "仅显示选定的区域"
#: editor/project_settings_editor.cpp
msgid "Filter mode:"
@@ -10197,7 +10202,7 @@ msgstr "筛选模å¼ï¼š"
#: editor/project_settings_editor.cpp
msgid "Locales:"
-msgstr "区域:"
+msgstr "区域:"
#: editor/project_settings_editor.cpp
msgid "AutoLoad"
@@ -10241,7 +10246,7 @@ msgstr "选择节点"
#: editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr "加载文件出错:ä¸æ˜¯èµ„æºæ–‡ä»¶ï¼"
+msgstr "加载文件出错:ä¸æ˜¯èµ„æºæ–‡ä»¶ï¼"
#: editor/property_editor.cpp
msgid "Pick a Node"
@@ -10249,7 +10254,7 @@ msgstr "选择一个节点"
#: editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr "(Bit)ä½ %d, val %d."
+msgstr "ä½ %d,值 %d。"
#: editor/property_selector.cpp
msgid "Select Property"
@@ -10297,7 +10302,7 @@ msgstr "节点å称"
#: editor/rename_dialog.cpp
msgid "Node's parent name, if available"
-msgstr "父节点的å称,如果有的è¯"
+msgstr "父节点å称(若有需è¦ï¼‰"
#: editor/rename_dialog.cpp
msgid "Node type"
@@ -10349,7 +10354,7 @@ msgid ""
"Missing digits are padded with leading zeros."
msgstr ""
"计数器数字的最少个数。\n"
-"缺失的数字将用0填充在头部。"
+"缺失的数字将用 0 填充在头部。"
#: editor/rename_dialog.cpp
msgid "Post-Process"
@@ -10389,7 +10394,7 @@ msgstr "正则表达å¼å‡ºé”™ï¼š"
#: editor/rename_dialog.cpp
msgid "At character %s"
-msgstr "ä½äºŽå­—符%s"
+msgstr "ä½äºŽå­—符 %s"
#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
msgid "Reparent Node"
@@ -10397,7 +10402,7 @@ msgstr "é‡è®¾çˆ¶èŠ‚点"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr "é‡è®¾ä½ç½®ï¼ˆé€‰æ‹©æ–°çš„父节点):"
+msgstr "é‡è®¾ä½ç½®ï¼ˆé€‰æ‹©æ–°çš„父节点):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
@@ -10409,7 +10414,7 @@ msgstr "é‡è®¾çˆ¶èŠ‚点"
#: editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr "è¿è¡Œæ¨¡å¼:"
+msgstr "è¿è¡Œæ¨¡å¼ï¼š"
#: editor/run_settings_dialog.cpp
msgid "Current Scene"
@@ -10421,7 +10426,7 @@ msgstr "主场景"
#: editor/run_settings_dialog.cpp
msgid "Main Scene Arguments:"
-msgstr "主场景å‚æ•°:"
+msgstr "主场景å‚数:"
#: editor/run_settings_dialog.cpp
msgid "Scene Run Settings"
@@ -10433,13 +10438,13 @@ msgstr "没有å¯å®žä¾‹åŒ–场景的父节点。"
#: editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
-msgstr "从%s加载场景出错"
+msgstr "从 %s 加载场景出错"
#: editor/scene_tree_dock.cpp
msgid ""
"Cannot instance the scene '%s' because the current scene exists within one "
"of its nodes."
-msgstr "无法实例化场景%s当å‰åœºæ™¯å·²å­˜åœ¨äºŽå®ƒçš„å­èŠ‚点中。"
+msgstr "无法实例化场景 %s,因为当å‰åœºæ™¯å·²å­˜åœ¨äºŽå…¶å­èŠ‚点中。"
#: editor/scene_tree_dock.cpp
msgid "Instance Scene(s)"
@@ -10491,23 +10496,23 @@ msgstr "将节点设置为根节点"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes and any children?"
-msgstr "是å¦åˆ é™¤èŠ‚点“%sâ€åŠå…¶å­èŠ‚点?"
+msgstr "是å¦åˆ é™¤èŠ‚点 “%s†åŠå…¶å­èŠ‚点?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
-msgstr "是å¦åˆ é™¤%d个节点?"
+msgstr "是å¦åˆ é™¤ %d 个节点?"
#: editor/scene_tree_dock.cpp
msgid "Delete the root node \"%s\"?"
-msgstr "是å¦åˆ é™¤æ ¹èŠ‚点“%sâ€ï¼Ÿ"
+msgstr "是å¦åˆ é™¤æ ¹èŠ‚点 “%sâ€ï¼Ÿ"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr "是å¦åˆ é™¤èŠ‚点“%sâ€åŠå…¶å­èŠ‚点?"
+msgstr "是å¦åˆ é™¤èŠ‚点 “%s†åŠå…¶å­èŠ‚点?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
-msgstr "是å¦åˆ é™¤èŠ‚点“%sâ€ï¼Ÿ"
+msgstr "是å¦åˆ é™¤èŠ‚点 “%sâ€ï¼Ÿ"
#: editor/scene_tree_dock.cpp
msgid "Can not perform with the root node."
@@ -10525,18 +10530,19 @@ msgstr "将新场景å¦å­˜ä¸º..."
msgid ""
"Disabling \"editable_instance\" will cause all properties of the node to be "
"reverted to their default."
-msgstr "ç¦ç”¨â€œå¯ç¼–辑实例â€å°†å¯¼è‡´èŠ‚点的所有属性æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚"
+msgstr "ç¦ç”¨ “editable_instance†将导致节点的所有属性æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚"
#: editor/scene_tree_dock.cpp
msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"å¼€å¯â€œåŠ è½½ä¸ºå ä½ç¬¦â€å°†ç¦ç”¨â€œå¯ç¼–辑实例â€å¹¶é‡ç½®è¯¥èŠ‚点的所有属性æ¢å¤ä¸ºå…¶é»˜è®¤å€¼ã€‚"
+"å¼€å¯ â€œåŠ è½½ä¸ºå ä½ç¬¦â€ å°†ç¦ç”¨ “å­èŠ‚点å¯ç¼–辑†并é‡ç½®è¯¥èŠ‚点的所有属性æ¢å¤ä¸ºå…¶é»˜è®¤"
+"值。"
#: editor/scene_tree_dock.cpp
msgid "Make Local"
-msgstr "使用本地"
+msgstr "转为本地"
#: editor/scene_tree_dock.cpp
msgid "New Scene Root"
@@ -10709,14 +10715,14 @@ msgstr "(连接æ¥æºï¼‰"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
-msgstr "节点é…置警告:"
+msgstr "节点é…置警告:"
#: editor/scene_tree_editor.cpp
msgid ""
"Node has %s connection(s) and %s group(s).\n"
"Click to show signals dock."
msgstr ""
-"节点具有%s个连接和%s个组。\n"
+"节点具有 %s 个连接和 %s 个分组。\n"
"å•å‡»ä»¥æ˜¾ç¤ºä¿¡å·é¢æ¿ã€‚"
#: editor/scene_tree_editor.cpp
@@ -10724,7 +10730,7 @@ msgid ""
"Node has %s connection(s).\n"
"Click to show signals dock."
msgstr ""
-"节点具有%s个连接。\n"
+"节点具有 %s 个连接。\n"
"å•å‡»ä»¥æ˜¾ç¤ºä¿¡å·é¢æ¿ã€‚"
#: editor/scene_tree_editor.cpp
@@ -10829,7 +10835,7 @@ msgstr "错误:无法创建脚本文件。"
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
-msgstr "从%s加载脚本出错"
+msgstr "从 %s 加载脚本出错"
#: editor/script_create_dialog.cpp
msgid "Overrides"
@@ -10869,7 +10875,7 @@ msgstr "脚本路径/å称有效。"
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
-msgstr "å…许:a-z,a-z,0-9,_ å’Œ ."
+msgstr "å…许:a-z, A-Z, 0-9, _ å’Œ ."
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)."
@@ -10927,15 +10933,15 @@ msgstr "错误:"
#: editor/script_editor_debugger.cpp
msgid "C++ Error"
-msgstr "C++错误"
+msgstr "C++ 错误"
#: editor/script_editor_debugger.cpp
msgid "C++ Error:"
-msgstr "C++错误:"
+msgstr "C++ 错误:"
#: editor/script_editor_debugger.cpp
msgid "C++ Source"
-msgstr "C++æºæ–‡ä»¶"
+msgstr "C++ æºæ–‡ä»¶"
#: editor/script_editor_debugger.cpp
msgid "Source:"
@@ -10943,7 +10949,7 @@ msgstr "æºæ–‡ä»¶:"
#: editor/script_editor_debugger.cpp
msgid "C++ Source:"
-msgstr "C++æºæ–‡ä»¶ï¼š"
+msgstr "C++ æºæ–‡ä»¶ï¼š"
#: editor/script_editor_debugger.cpp
msgid "Stack Trace"
@@ -11007,7 +11013,7 @@ msgstr "从列表中选å–一个或多个项目以显示图表。"
#: editor/script_editor_debugger.cpp
msgid "List of Video Memory Usage by Resource:"
-msgstr "å ç”¨æ˜¾å­˜çš„资æºåˆ—表:"
+msgstr "å ç”¨æ˜¾å­˜çš„资æºåˆ—表:"
#: editor/script_editor_debugger.cpp
msgid "Total:"
@@ -11015,7 +11021,7 @@ msgstr "åˆè®¡ï¼š"
#: editor/script_editor_debugger.cpp
msgid "Export list to a CSV file"
-msgstr "将列表导出为CSV文件"
+msgstr "将列表导出为 CSV 文件"
#: editor/script_editor_debugger.cpp
msgid "Resource Path"
@@ -11039,15 +11045,15 @@ msgstr "其他"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr "点击的控件:"
+msgstr "点击的控件:"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr "点击的控件类型:"
+msgstr "点击的控件类型:"
#: editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
-msgstr "实时编辑根节点:"
+msgstr "实时编辑根节点:"
#: editor/script_editor_debugger.cpp
msgid "Set From Tree"
@@ -11055,7 +11061,7 @@ msgstr "从场景树设置"
#: editor/script_editor_debugger.cpp
msgid "Export measures as CSV"
-msgstr "导出为CSVæ ¼å¼"
+msgstr "导出为 CSV æ ¼å¼"
#: editor/settings_config_dialog.cpp
msgid "Erase Shortcut"
@@ -11103,11 +11109,11 @@ msgstr "修改通知器 AABB"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Particles AABB"
-msgstr "修改粒å­AABB"
+msgstr "ä¿®æ”¹ç²’å­ AABB"
#: editor/spatial_editor_gizmos.cpp
msgid "Change Probe Extents"
-msgstr "修改探针(Probe)范围"
+msgstr "修改探针范围"
#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
msgid "Change Sphere Shape Radius"
@@ -11171,7 +11177,7 @@ msgstr "åŒå‡»åˆ›å»ºæ–°æ¡ç›®"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Platform:"
-msgstr "å¹³å°:"
+msgstr "å¹³å°ï¼š"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Platform"
@@ -11183,11 +11189,11 @@ msgstr "动æ€é“¾æŽ¥åº“"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Add an architecture entry"
-msgstr "添加CPU架构项"
+msgstr "添加架构项"
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "GDNativeLibrary"
-msgstr "动æ€é“¾æŽ¥åº“"
+msgstr "GDNative 库"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Enabled GDNative Singleton"
@@ -11203,7 +11209,7 @@ msgstr "库"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Libraries: "
-msgstr "库: "
+msgstr "库: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
@@ -11211,7 +11217,7 @@ msgstr "GDNative"
#: modules/gdscript/gdscript_functions.cpp
msgid "Step argument is zero!"
-msgstr "Stepå‚数为 0 ï¼"
+msgstr "Step å‚数为 0ï¼"
#: modules/gdscript/gdscript_functions.cpp
msgid "Not a script with an instance"
@@ -11227,15 +11233,15 @@ msgstr "没有基于资æºæ–‡ä»¶"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆç¼ºå°‘@path)"
+msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆç¼ºå°‘ @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
-msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆæ— æ³•åŠ è½½è„šæœ¬@path)"
+msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆæ— æ³•åŠ è½½ @path 的脚本)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆæ— æ•ˆè„šæœ¬@path)"
+msgstr "实例字典格å¼ä¸æ­£ç¡®ï¼ˆ@path 的脚本无效)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
@@ -11319,27 +11325,27 @@ msgstr "编辑 Z 轴"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate X"
-msgstr "光标沿X轴旋转"
+msgstr "光标沿 X 轴旋转"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Y"
-msgstr "沿Y轴旋转"
+msgstr "沿 Y 轴旋转"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Rotate Z"
-msgstr "沿Z轴旋转"
+msgstr "沿 Z 轴旋转"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate X"
-msgstr "光标沿Xè½´å‘åŽæ—‹è½¬"
+msgstr "光标沿 X è½´å‘åŽæ—‹è½¬"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Y"
-msgstr "光标沿Yè½´å‘åŽæ—‹è½¬"
+msgstr "光标沿 Y è½´å‘åŽæ—‹è½¬"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Back Rotate Z"
-msgstr "光标沿Zè½´å‘åŽæ—‹è½¬"
+msgstr "光标沿 Z è½´å‘åŽæ—‹è½¬"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Cursor Clear Rotation"
@@ -11359,11 +11365,11 @@ msgstr "填充已选"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "GridMap Settings"
-msgstr "GridMap设置"
+msgstr "GridMap 设置"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Pick Distance:"
-msgstr "拾å–è·ç¦»:"
+msgstr "拾å–è·ç¦»ï¼š"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Filter meshes"
@@ -11371,7 +11377,7 @@ msgstr "筛选网格"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
-msgstr "å‘æ­¤GridMapæ供网格库资æºä»¥ä½¿ç”¨å…¶ç½‘格。"
+msgstr "å‘æ­¤ GridMap æ供网格库资æºä»¥ä½¿ç”¨å…¶ç½‘格。"
#: modules/mono/csharp_script.cpp
msgid "Class name can't be a reserved keyword"
@@ -11387,7 +11393,7 @@ msgstr "烘焙导航网"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr "清除导航网格(mesh)。"
+msgstr "清除导航网格。"
#: modules/recast/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
@@ -11427,11 +11433,11 @@ msgstr "创建多边形网格..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Converting to native navigation mesh..."
-msgstr "转æ¢ä¸ºå¯¼èˆªç½‘æ ¼(mesh)..."
+msgstr "转æ¢ä¸ºå¯¼èˆªç½‘æ ¼..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr "导航网格(Mesh)生æˆè®¾ç½®:"
+msgstr "导航网格生æˆè®¾ç½®:"
#: modules/recast/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
@@ -11446,19 +11452,20 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
-"一个节点在无工作内存的情况下被yielded,请阅读文档æ¥æŸ¥çœ‹å¦‚何适当的yieldï¼"
+"一个节点在无工作内存的情况下调用了 yield,请阅读文档æ¥æŸ¥çœ‹å¦‚何正确使用 "
+"yieldï¼"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
-msgstr "节点已yielded,但并没有在第一个工作内存中返回一个函数状æ€ã€‚"
+msgstr "节点调用了 yield,但并没有在第一个工作内存中返回函数状æ€ã€‚"
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
-msgstr "节点工作内存的第一个节点的返回值必须已赋值ï¼è¯·ä¿®æ­£ä½ çš„节点。"
+msgstr "节点工作内存的第一个节点的返回值必须被赋值ï¼è¯·ä¿®æ­£èŠ‚点。"
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
@@ -11466,7 +11473,7 @@ msgstr "节点返回了一个无效的连续输出: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
-msgstr "在éžå †æ ˆä¸­çš„节点中找到连续bit,报告bugï¼"
+msgstr "在éžå †æ ˆä¸­çš„节点中找到连续比特,请回报 Bugï¼"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
@@ -11582,11 +11589,11 @@ msgstr "å¤åˆ¶ VisualScript 节点"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
-msgstr "æŒ‰ä½ %s 放置一个Getter节点,按ä½Shift键放置一个通用签å。"
+msgstr "æŒ‰ä½ %s 放置一个 Getter èŠ‚ç‚¹ï¼ŒæŒ‰ä½ Shift 键放置一个通用签å。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
-msgstr "按ä½Ctrl键放置一个Getter节点。按ä½Shift键放置一个通用签å。"
+msgstr "æŒ‰ä½ Ctrl 键放置一个 Getter èŠ‚ç‚¹ã€‚æŒ‰ä½ Shift 键放置一个通用签å。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a simple reference to the node."
@@ -11594,19 +11601,19 @@ msgstr "æŒ‰ä½ %s 放置一个场景节点的引用节点。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a simple reference to the node."
-msgstr "按ä½Ctrl键放置一个场景节点的引用节点。"
+msgstr "æŒ‰ä½ Ctrl 键放置一个场景节点的引用节点。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a Variable Setter."
-msgstr "æŒ‰ä½ %s 放置å˜é‡çš„Setter节点。"
+msgstr "æŒ‰ä½ %s 放置å˜é‡çš„ Setter 节点。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Variable Setter."
-msgstr "按ä½Ctrl键放置å˜é‡çš„Setter节点。"
+msgstr "æŒ‰ä½ Ctrl 键放置å˜é‡çš„ Setter 节点。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Preload Node"
-msgstr "添加Preload节点"
+msgstr "添加预载 (Preload) 节点"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -11617,16 +11624,16 @@ msgid ""
"Can't drop properties because script '%s' is not used in this scene.\n"
"Drop holding 'Shift' to just copy the signature."
msgstr ""
-"无法放置该属性,因为脚本“%sâ€æœªåœ¨è¯¥åœºæ™¯ä¸­ä½¿ç”¨ã€‚\n"
-"放置时按ä½Shifté”®å¯ä»¥ä»…å¤åˆ¶ç­¾å。"
+"无法放置该属性,因为脚本 “%s†未在该场景中使用。\n"
+"æ”¾ç½®æ—¶æŒ‰ä½ Shift é”®å¯ä»¥ä»…å¤åˆ¶ç­¾å。"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
-msgstr "添加属性Getter"
+msgstr "添加属性 Getter"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Setter Property"
-msgstr "添加属性Setter"
+msgstr "添加属性 Setter"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Base Type"
@@ -11658,7 +11665,7 @@ msgstr "连接节点åºåˆ—"
#: modules/visual_script/visual_script_editor.cpp
msgid "Script already has function '%s'"
-msgstr "脚本已存在函数 '%s'"
+msgstr "脚本已有函数 “%sâ€"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change Input Value"
@@ -11802,33 +11809,33 @@ msgstr "路径必须指å‘节点ï¼"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr "'%s'这个属性å的在节点'%s'中ä¸å­˜åœ¨ã€‚"
+msgstr "节点 “%s†的索引属性å “%s†无效。"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ":无效å‚数类型: "
+msgstr ": 无效å‚数类型: "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ":无效å‚数: "
+msgstr ": 无效å‚æ•°: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr "脚本中未找到VariableGet: "
+msgstr "脚本中未找到 VariableGet: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr "脚本中未找到VariableSet: "
+msgstr "脚本中未找到 VariableSet: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
-msgstr "自定义节点ä¸åŒ…å«_step()方法,ä¸èƒ½ç”Ÿæˆå›¾åƒã€‚"
+msgstr "自定义节点ä¸åŒ…å« _step() 方法,ä¸èƒ½ç”Ÿæˆå›¾åƒã€‚"
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
-msgstr "_step()的返回值无效,必须是整形(seq out)或字符串(error)。"
+msgstr "_step() 的返回值无效,必须是整形 (Seq Out) 或字符串 (Error)。"
#: modules/visual_script/visual_script_property_selector.cpp
msgid "Search VisualScript"
@@ -11844,7 +11851,7 @@ msgstr "设置 %s"
#: platform/android/export/export.cpp
msgid "Package name is missing."
-msgstr "缺包å。"
+msgstr "包å缺失。"
#: platform/android/export/export.cpp
msgid "Package segments must be of non-zero length."
@@ -11852,7 +11859,7 @@ msgstr "包段的长度必须为éžé›¶ã€‚"
#: platform/android/export/export.cpp
msgid "The character '%s' is not allowed in Android application package names."
-msgstr "Android应用程åºåŒ…å称中ä¸å…许使用字符“%sâ€ã€‚"
+msgstr "Android 应用程åºåŒ…å称中ä¸å…许使用字符 “%sâ€ã€‚"
#: platform/android/export/export.cpp
msgid "A digit cannot be the first character in a package segment."
@@ -11860,11 +11867,11 @@ msgstr "包段中的第一个字符ä¸èƒ½æ˜¯æ•°å­—。"
#: platform/android/export/export.cpp
msgid "The character '%s' cannot be the first character in a package segment."
-msgstr "包段中的第一个字符ä¸èƒ½æ˜¯â€œ%sâ€ã€‚"
+msgstr "包段中的第一个字符ä¸èƒ½æ˜¯ “%sâ€ã€‚"
#: platform/android/export/export.cpp
msgid "The package must have at least one '.' separator."
-msgstr "包必须至少有一个“.â€åˆ†éš”符。"
+msgstr "包必须至少有一个 “.†分隔符。"
#: platform/android/export/export.cpp
msgid "Select device from the list"
@@ -11872,11 +11879,11 @@ msgstr "从列表中选择设备"
#: platform/android/export/export.cpp
msgid "ADB executable not configured in the Editor Settings."
-msgstr "未在编辑器设置中é…ç½®ADBå¯æ‰§è¡Œæ–‡ä»¶ã€‚"
+msgstr "未在编辑器设置中é…ç½® ADB å¯æ‰§è¡Œæ–‡ä»¶ã€‚"
#: platform/android/export/export.cpp
msgid "OpenJDK jarsigner not configured in the Editor Settings."
-msgstr "未在编辑器设置中é…ç½®OpenJDK Jarsigner。"
+msgstr "未在编辑器设置中é…ç½® OpenJDK Jarsigner。"
#: platform/android/export/export.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
@@ -11888,21 +11895,29 @@ msgstr "用于å‘布的密钥存储在导出预设中未被正确设置。"
#: platform/android/export/export.cpp
msgid "Custom build requires a valid Android SDK path in Editor Settings."
-msgstr "自定义构建需è¦åœ¨â€œç¼–辑器设置â€ä¸­ä½¿ç”¨æœ‰æ•ˆçš„Android SDK路径。"
+msgstr "自定义构建需è¦åœ¨ “编辑器设置†中使用有效的 Android SDK 路径。"
#: platform/android/export/export.cpp
msgid "Invalid Android SDK path for custom build in Editor Settings."
-msgstr "用于“编辑器设置â€ä¸­è‡ªå®šä¹‰æž„建的Android SDK路径是无效的。"
+msgstr "用于 “编辑器设置†中自定义构建的 Android SDK 路径是无效的。"
+
+#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
-msgstr "未在项目中安装Android构建模æ¿ã€‚从项目èœå•å®‰è£…它。"
+msgstr "未在项目中安装 Android 构建模æ¿ã€‚从项目èœå•å®‰è£…它。"
#: platform/android/export/export.cpp
msgid "Invalid public key for APK expansion."
-msgstr "APK扩展的公钥无效。"
+msgstr "APK 扩展的公钥无效。"
#: platform/android/export/export.cpp
msgid "Invalid package name:"
@@ -11913,46 +11928,63 @@ msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-"“android/modulesâ€é¡¹ç›®è®¾ç½®ï¼ˆå˜æ›´äºŽGodot 3.2.2)中包å«äº†æ— æ•ˆæ¨¡"
-"组“GodotPaymentV3â€.\n"
+"“android/modules†项目设置(å˜æ›´äºŽGodot 3.2.2)中包å«äº†æ— æ•ˆæ¨¡ç»„ "
+"“GodotPaymentV3â€ã€‚\n"
#: platform/android/export/export.cpp
msgid "\"Use Custom Build\" must be enabled to use the plugins."
-msgstr "å¿…é¡»å¯ç”¨â€œä½¿ç”¨è‡ªå®šä¹‰æž„建â€æ‰èƒ½ä½¿ç”¨æ’件。"
+msgstr "å¿…é¡»å¯ç”¨ “使用自定义构建†æ‰èƒ½ä½¿ç”¨æ’件。"
#: platform/android/export/export.cpp
msgid ""
"\"Degrees Of Freedom\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR"
"\"."
-msgstr "“自由度â€åªæœ‰åœ¨å½““Xr Modeâ€æ˜¯â€œOculus Mobile VRâ€æ—¶æ‰æœ‰æ•ˆã€‚"
+msgstr ""
+"“Degrees Of Freedom†åªæœ‰åœ¨å½“ “Xr Mode†是 “Oculus Mobile VR†时æ‰æœ‰æ•ˆã€‚"
#: platform/android/export/export.cpp
msgid ""
"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr "“手部追踪â€åªæœ‰åœ¨å½““Xr Modeâ€æ˜¯â€œOculus Mobile VRâ€æ—¶æ‰æœ‰æ•ˆã€‚"
+msgstr "“Hand Tracking†åªæœ‰åœ¨å½“ “Xr Mode†是 “Oculus Mobile VR†时æ‰æœ‰æ•ˆã€‚"
#: platform/android/export/export.cpp
msgid ""
"\"Focus Awareness\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
-msgstr "“焦点感知â€åªæœ‰åœ¨å½““Xr Modeâ€æ˜¯â€œOculus Mobile VRâ€æ—¶æ‰æœ‰æ•ˆã€‚"
+msgstr "“Focus Awareness†åªæœ‰åœ¨å½“ “Xr Mode†是 “Oculus Mobile VR†时æ‰æœ‰æ•ˆã€‚"
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr "“Export AAB†åªæœ‰åœ¨å½“å¯ç”¨ “Use Custom Build†时æ‰æœ‰æ•ˆã€‚"
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to delete unaligned APK."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "无效文件åï¼Android App Bundle 必须有 *.aab 扩展。"
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "APK Expansion 与 Android App Bundle ä¸å…¼å®¹ã€‚"
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr "无效文件åï¼Android APK 必须有 *.apk 扩展。"
+
+#: platform/android/export/export.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -11973,25 +12005,25 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Building Android Project (gradle)"
-msgstr "构建android项目(gradle)"
+msgstr "构建 Android 项目 (Gradle)"
#: platform/android/export/export.cpp
msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"Android项目构建失败,请检查输出中显示的错误。\n"
-"你也å¯ä»¥è®¿é—®docs.godotengine.org查看Android构建文档。"
+"Android 项目构建失败,请检查输出中显示的错误。\n"
+"也å¯ä»¥è®¿é—® docs.godotengine.org 查看 Android 构建文档。"
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "移动输出"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
-msgstr ""
+msgstr "无法å¤åˆ¶ä¸Žæ›´å导出文件,请在 Gradle 项目文件夹内确认输出。"
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -12003,7 +12035,7 @@ msgstr "标识符中ä¸å…许使用字符 '%s' 。"
#: platform/iphone/export/export.cpp
msgid "App Store Team ID not specified - cannot configure the project."
-msgstr "未指定应用商店团队ID-无法é…置项目。"
+msgstr "未指定 App Store Team ID - 无法é…置项目。"
#: platform/iphone/export/export.cpp
msgid "Invalid Identifier:"
@@ -12015,7 +12047,7 @@ msgstr "预设中未指定必需的图标。"
#: platform/javascript/export/export.cpp
msgid "Stop HTTP Server"
-msgstr "åœæ­¢HTTPæœåŠ¡"
+msgstr "åœæ­¢ HTTP æœåŠ¡"
#: platform/javascript/export/export.cpp
msgid "Run in Browser"
@@ -12023,7 +12055,7 @@ msgstr "在æµè§ˆå™¨ä¸­è¿è¡Œ"
#: platform/javascript/export/export.cpp
msgid "Run exported HTML in the system's default browser."
-msgstr "使用默认æµè§ˆå™¨æ‰“开导出的HTML文件。"
+msgstr "使用默认æµè§ˆå™¨æ‰“开导出的 HTML 文件。"
#: platform/javascript/export/export.cpp
msgid "Could not write file:"
@@ -12039,11 +12071,11 @@ msgstr "导出模æ¿æ— æ•ˆï¼š"
#: platform/javascript/export/export.cpp
msgid "Could not read custom HTML shell:"
-msgstr "无法读å–自定义HTML命令:"
+msgstr "无法读å–自定义 HTML 壳层:"
#: platform/javascript/export/export.cpp
msgid "Could not read boot splash image file:"
-msgstr "无法读å–å¯åŠ¨å›¾ç‰‡:"
+msgstr "无法读å–å¯åŠ¨å›¾ç‰‡ï¼š"
#: platform/javascript/export/export.cpp
msgid "Using default boot splash image."
@@ -12063,11 +12095,11 @@ msgstr "å‘布者显示å称无效。"
#: platform/uwp/export/export.cpp
msgid "Invalid product GUID."
-msgstr "产å“GUID无效。"
+msgstr "äº§å“ GUID 无效。"
#: platform/uwp/export/export.cpp
msgid "Invalid publisher GUID."
-msgstr "å‘布者GUID无效。"
+msgstr "å‘布者 GUID 无效。"
#: platform/uwp/export/export.cpp
msgid "Invalid background color."
@@ -12075,47 +12107,47 @@ msgstr "无效的背景颜色。"
#: platform/uwp/export/export.cpp
msgid "Invalid Store Logo image dimensions (should be 50x50)."
-msgstr "Logo图片尺寸无效(图åƒå°ºå¯¸å¿…须是50x50)。"
+msgstr "商店 Logo 图片尺寸无效(图åƒå°ºå¯¸å¿…须是 50x50)。"
#: platform/uwp/export/export.cpp
msgid "Invalid square 44x44 logo image dimensions (should be 44x44)."
-msgstr "正方形的 44x44 Logo图片尺寸无效(应为44x44)。"
+msgstr "正方形的 44x44 Logo 图片尺寸无效(应为 44x44)。"
#: platform/uwp/export/export.cpp
msgid "Invalid square 71x71 logo image dimensions (should be 71x71)."
-msgstr "正方形的 71x71 Logo标志图片尺寸无效(应为71x71)。"
+msgstr "正方形的 71x71 Logo 标志图片尺寸无效(应为 71x71)。"
#: platform/uwp/export/export.cpp
msgid "Invalid square 150x150 logo image dimensions (should be 150x150)."
-msgstr "正方的 150x150 Logo图片尺寸无效(应为150x150)。"
+msgstr "正方形的 150x150 Logo 图片尺寸无效(应为 150x150)。"
#: platform/uwp/export/export.cpp
msgid "Invalid square 310x310 logo image dimensions (should be 310x310)."
-msgstr "正方形的 310x310 Logo图片尺寸无效(应为310x310)。"
+msgstr "正方形的 310x310 Logo 图片尺寸无效(应为 310x310)。"
#: platform/uwp/export/export.cpp
msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)."
-msgstr "宽幅310x150 Logo图片尺寸无效(应为310x150)。"
+msgstr "宽幅 310x150 Logo 图片尺寸无效(应为 310x150)。"
#: platform/uwp/export/export.cpp
msgid "Invalid splash screen image dimensions (should be 620x300)."
-msgstr "å¯åŠ¨ç”»é¢å›¾ç‰‡å°ºå¯¸æ— æ•ˆï¼ˆåº”为620x300)。"
+msgstr "å¯åŠ¨ç”»é¢å›¾ç‰‡å°ºå¯¸æ— æ•ˆï¼ˆåº”为 620x300)。"
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite to display frames."
msgstr ""
-"必须创建SpriteFrames资æºï¼Œæˆ–在“ Framesâ€å±žæ€§ä¸­è®¾ç½®SpriteFrames资æºï¼Œä»¥ä¾¿"
-"AnimatedSprite显示帧。"
+"必须创建 SpriteFrames 资æºï¼Œæˆ–在 “Frames†属性中设置 SpriteFrames 资æºï¼Œä»¥ä¾¿ "
+"AnimatedSprite 显示帧。"
#: scene/2d/canvas_modulate.cpp
msgid ""
"Only one visible CanvasModulate is allowed per scene (or set of instanced "
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
-"æ¯ä¸ªåœºæ™¯ä¸­åªå…许有一个CanvasModulate类型的节点,场景中的第一个CanvasModulate"
-"节点能正常工作,其余的将被忽略。"
+"æ¯ä¸ªåœºæ™¯ä¸­åªå…许有一个 CanvasModulate 类型的节点,场景中的第一个 "
+"CanvasModulate 节点能正常工作,其余的将被忽略。"
#: scene/2d/collision_object_2d.cpp
msgid ""
@@ -12133,12 +12165,12 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionPolygon2D类型节点åªèƒ½ä¸ºCollisionObject2D的派生类æ供碰撞形状数æ®ï¼Œè¯·"
-"将其放在Area2Dã€StaticBody2Dã€RigidBody2D或KinematicBody2D节点下。"
+"CollisionPolygon2D 类型节点åªèƒ½ä¸º CollisionObject2D 的派生类æ供碰撞形状数"
+"æ®ï¼Œè¯·å°†å…¶æ”¾åœ¨ Area2D, StaticBody2D, RigidBody2D 或 KinematicBody2D 节点下。"
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
-msgstr "空的CollisionPolygon2Dä¸èµ·ä»»ä½•ç¢°æ’žæ£€æµ‹ä½œç”¨ã€‚"
+msgstr "空的 CollisionPolygon2D ä¸èµ·ä»»ä½•ç¢°æ’žæ£€æµ‹ä½œç”¨ã€‚"
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -12146,14 +12178,14 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D类型节点åªèƒ½ä¸ºCollisionObject2D的派生类æ供碰撞形状数æ®ï¼Œè¯·å°†"
-"其放在Area2Dã€StaticBody2Dã€RigidBody2D或者是KinematicBody2D节点下。"
+"CollisionShape2D 类型节点åªèƒ½ä¸º CollisionObject2D 的派生类æ供碰撞形状数æ®ï¼Œ"
+"请将其放在 Area2D, StaticBody2D, RigidBody2D 或者是 KinematicBody2D 节点下。"
#: scene/2d/collision_shape_2d.cpp
msgid ""
"A shape must be provided for CollisionShape2D to function. Please create a "
"shape resource for it!"
-msgstr "形状资æºå¿…须是通过CollisionShape2D节点的shape属性创建的ï¼"
+msgstr "CollisionShape2D 必须有形状æ‰èƒ½å·¥ä½œã€‚请先为其创建形状资æºï¼"
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -12167,13 +12199,15 @@ msgstr ""
msgid ""
"CPUParticles2D animation requires the usage of a CanvasItemMaterial with "
"\"Particles Animation\" enabled."
-msgstr "CPUParticles2D动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å­åŠ¨ç”»â€çš„CanvasItemMaterial。"
+msgstr ""
+"CPUParticles2D 动画需è¦ä½¿ç”¨å¯ç”¨äº† “Particles Animation†的 "
+"CanvasItemMaterial。"
#: scene/2d/light_2d.cpp
msgid ""
"A texture with the shape of the light must be supplied to the \"Texture\" "
"property."
-msgstr "必须将具有ç¯å…‰å½¢çŠ¶çš„纹ç†æ供给“纹ç†â€ï¼ˆTexture)属性。"
+msgstr "必须将具有ç¯å…‰å½¢çŠ¶çš„纹ç†æ供给 “Textureâ€ï¼ˆçº¹ç†ï¼‰å±žæ€§ã€‚"
#: scene/2d/light_occluder_2d.cpp
msgid ""
@@ -12189,21 +12223,21 @@ msgid ""
"A NavigationPolygon resource must be set or created for this node to work. "
"Please set a property or draw a polygon."
msgstr ""
-"请为此节点设置一个NavigationPolygon类型的资æºä½œä¸ºå½¢çŠ¶ï¼Œè¿™æ ·å®ƒæ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
+"请为此节点设置一个 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çš„å­å­™æ‰èƒ½ä¸ºå…¶æ供导航"
-"æ•°æ®ã€‚"
+"NavigationPolygonInstance 类型的节点必须作为 Navigation2D çš„å­èŠ‚点或å­å­™èŠ‚点"
+"æ‰èƒ½ä¸ºå…¶æ供导航数æ®ã€‚"
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"ParallaxLayer类型的节点必须作为ParallaxBackgroundçš„å­èŠ‚点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
+"ParallaxLayer 类型的节点必须作为 ParallaxBackground çš„å­èŠ‚点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/2d/particles_2d.cpp
msgid ""
@@ -12211,8 +12245,8 @@ msgid ""
"Use the CPUParticles2D node instead. You can use the \"Convert to "
"CPUParticles\" option for this purpose."
msgstr ""
-"基于GPUçš„ç²’å­ä¸å—GLES2视频驱动程åºçš„支æŒã€‚\n"
-"改为使用CPUParticles2D节点。为此,您å¯ä»¥ä½¿ç”¨â€œè½¬æ¢ä¸º CPUç²’å­â€é€‰é¡¹ã€‚"
+"基于 GPU çš„ç²’å­ä¸å— GLES2 视频驱动程åºçš„支æŒã€‚\n"
+"改为使用 CPUParticles2D 节点。为此,å¯ä»¥ä½¿ç”¨ “Convert to CPUParticles†选项。"
#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
msgid ""
@@ -12224,11 +12258,12 @@ msgstr "ç²’å­æ质没有指定,该行为无效。"
msgid ""
"Particles2D animation requires the usage of a CanvasItemMaterial with "
"\"Particles Animation\" enabled."
-msgstr "Particles2D 动画需è¦ä½¿ç”¨å¯ç”¨äº†â€œç²’å­åŠ¨ç”»â€çš„CanvasItemMaterial。"
+msgstr ""
+"Particles2D 动画需è¦ä½¿ç”¨å¯ç”¨äº† “Particles Animation†的 CanvasItemMaterial。"
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
-msgstr "PathFollow2D类型的节点åªæœ‰ä½œä¸ºPath2Dçš„å­èŠ‚点节æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
+msgstr "PathFollow2D 类型的节点åªæœ‰ä½œä¸º Path2D çš„å­èŠ‚点节æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -12236,13 +12271,13 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
-"对RigidBody2D (在character或rigid模å¼æƒ³ï¼‰çš„尺寸修改在è¿è¡Œæ—¶ä¼šè¢«ç‰©ç†å¼•æ“Žçš„覆"
-"盖。\n"
+"对 RigidBody2D (在 Character 或 Rigid 模å¼ä¸‹ï¼‰çš„尺寸修改在è¿è¡Œæ—¶ä¼šè¢«ç‰©ç†å¼•æ“Ž"
+"的覆盖。\n"
"建议您修改å­èŠ‚点的碰撞形状。"
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
-msgstr "Path属性必须指å‘有效的Node2D节点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
+msgstr "Path 属性必须指å‘有效的 Node2D 节点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/2d/skeleton_2d.cpp
msgid "This Bone2D chain should end at a Skeleton2D node."
@@ -12264,43 +12299,43 @@ msgid ""
"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
"KinematicBody2D, etc. to give them a shape."
msgstr ""
-"å¯ç”¨äº†â€œä½¿ç”¨çˆ¶çº§â€çš„图å—地图需è¦çˆ¶çº§ CollisionObject2D æ‰èƒ½æ供形状。请使用它作"
-"为 Area2Dã€StaticBody2Dã€RigidBody2Dã€KinematicBody2D 等的å­é¡¹æ¥èµ‹äºˆå®ƒä»¬å½¢"
-"状。"
+"å¯ç”¨äº†â€œUse Parent†的 TileMap 需è¦çˆ¶çº§ CollisionObject2D æ‰èƒ½æ供形状。请使用"
+"它作为 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D 等的å­é¡¹æ¥èµ‹äºˆå®ƒä»¬"
+"形状。"
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnabler2D works best when used with the edited scene root directly "
"as parent."
-msgstr "当直接将已编辑的场景根作为父级使用时,VisibilityEnabler2D效果最佳。"
+msgstr "当直接将已编辑的场景根作为父级使用时,VisibilityEnabler2D 效果最佳。"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent."
-msgstr "ARVRCamera必须将ARVROrigin节点作为其父节点。"
+msgstr "ARVRCamera 必须将 ARVROrigin 节点作为其父节点。"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRController must have an ARVROrigin node as its parent."
-msgstr "ARVRController必须具有ARVROrigin节点作为其父节点。"
+msgstr "ARVRController 必须具有 ARVROrigin 节点作为其父节点。"
#: scene/3d/arvr_nodes.cpp
msgid ""
"The controller ID must not be 0 or this controller won't be bound to an "
"actual controller."
-msgstr "控制器IDä¸èƒ½ä¸º0,å¦åˆ™æ­¤æŽ§åˆ¶å™¨å°†ä¸ä¼šç»‘定到实际的控制器。"
+msgstr "控制器 ID ä¸èƒ½ä¸º 0,å¦åˆ™æ­¤æŽ§åˆ¶å™¨å°†ä¸ä¼šç»‘定到实际的控制器。"
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent."
-msgstr "ARVRAnchor必须具有ARVROrigin节点作为其父节点。"
+msgstr "ARVRAnchor 必须具有 ARVROrigin 节点作为其父节点。"
#: scene/3d/arvr_nodes.cpp
msgid ""
"The anchor ID must not be 0 or this anchor won't be bound to an actual "
"anchor."
-msgstr "锚点IDä¸èƒ½ä¸º0,å¦åˆ™æ­¤é”šç‚¹å°†ä¸ä¼šç»‘定到实际的锚点。"
+msgstr "锚点 ID ä¸èƒ½ä¸º 0,å¦åˆ™æ­¤é”šç‚¹å°†ä¸ä¼šç»‘定到实际的锚点。"
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
-msgstr "ARVROrigin需è¦ä¸€ä¸ªARVRCameraå­èŠ‚点。"
+msgstr "ARVROrigin 需è¦ä¸€ä¸ª ARVRCamera å­èŠ‚点。"
#: scene/3d/baked_lightmap.cpp
msgid "%d%%"
@@ -12341,12 +12376,13 @@ msgid ""
"CollisionObject derived node. Please only use it as a child of Area, "
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionPolygon类型节点åªèƒ½ä¸ºCollisionObject的派生类æ供碰撞形状数æ®ï¼Œè¯·å°†å…¶"
-"放在Areaã€StaticBodyã€RigidBody或KinematicBody节点下。"
+"CollisionPolygon 类型节点åªèƒ½ä¸º CollisionObject 的派生类æ供碰撞形状数æ®ï¼Œè¯·"
+"将其放在 Area, StaticBody, RigidBody, KinematicBody 等节点下æ¥ä¸ºèŠ‚点æ供形"
+"状。"
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
-msgstr "空CollisionPolygon节点ä¸èµ·ç¢°æ’žæ£€æµ‹ä½œç”¨ã€‚"
+msgstr "空 CollisionPolygon 节点ä¸èµ·ç¢°æ’žæ£€æµ‹ä½œç”¨ã€‚"
#: scene/3d/collision_shape.cpp
msgid ""
@@ -12354,14 +12390,14 @@ msgid ""
"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
"KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionShape类型节点åªèƒ½ä¸ºCollisionObject的派生类æ供碰撞形状数æ®ï¼Œè¯·å°†å…¶æ”¾"
-"在Areaã€StaticBodyã€RigidBody或KinematicBody节点下。"
+"CollisionShape 类型节点åªèƒ½ä¸º CollisionObject 的派生类æ供碰撞形状数æ®ï¼Œè¯·å°†"
+"其放在 Area, StaticBody, RigidBody, KinematicBody 节点下æ¥ä¸ºèŠ‚点æ供形状。"
#: scene/3d/collision_shape.cpp
msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it."
-msgstr "å¿…é¡»æ供形状以使CollisionShape起作用。请为其创建形状资æºã€‚"
+msgstr "å¿…é¡»æ供形状以使 CollisionShape 起作用。请为其创建形状资æºã€‚"
#: scene/3d/collision_shape.cpp
msgid ""
@@ -12383,8 +12419,8 @@ msgid ""
"CPUParticles animation requires the usage of a SpatialMaterial whose "
"Billboard Mode is set to \"Particle Billboard\"."
msgstr ""
-"CPUParticles动画需è¦ä½¿ç”¨SpatialMaterial,其“公告牌模å¼â€è®¾ç½®ä¸ºâ€œ Particle "
-"Billboardâ€ã€‚"
+"CPUParticles 动画需è¦ä½¿ç”¨ Billboard Mode 设置为 “Particle Billboard†的 "
+"SpatialMaterial。"
#: scene/3d/gi_probe.cpp
msgid "Plotting Meshes"
@@ -12395,13 +12431,13 @@ msgid ""
"GIProbes are not supported by the GLES2 video driver.\n"
"Use a BakedLightmap instead."
msgstr ""
-"GLES2视频驱动程åºä¸æ”¯æŒGIProbe。\n"
-"请改用BakedLightmap。"
+"GLES2 视频驱动程åºä¸æ”¯æŒ GIProbes。\n"
+"请改用 BakedLightmap。"
#: scene/3d/interpolated_camera.cpp
msgid ""
"InterpolatedCamera has been deprecated and will be removed in Godot 4.0."
-msgstr "InterpolatedCamera已废弃,将在Godot 4.0中删除。"
+msgstr "InterpolatedCamera 已废弃,将在 Godot 4.0 中删除。"
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -12409,14 +12445,15 @@ msgstr "角度宽于 90 度的 SpotLight 无法投射出阴影。"
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
-msgstr "此节点需è¦è®¾ç½®NavigationMesh资æºæ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
+msgstr "此节点需è¦è®¾ç½® NavigationMesh 资æºæ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/3d/navigation_mesh.cpp
msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshInstance类型节点必须作为Navigation节点的å­å­™æ‰èƒ½æ供导航数æ®ã€‚"
+"NavigationMeshInstance 类型节点必须作为 Navigation 节点的å­èŠ‚点或å­å­™èŠ‚点æ‰èƒ½"
+"æ供导航数æ®ã€‚"
#: scene/3d/particles.cpp
msgid ""
@@ -12424,31 +12461,33 @@ msgid ""
"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
"\" option for this purpose."
msgstr ""
-"基于GPUçš„ç²’å­ä¸å—GLES2视频驱动程åºçš„支æŒã€‚\n"
-"改为使用CPUParticles节点。为此,您å¯ä»¥ä½¿ç”¨â€œè½¬æ¢ä¸º CPUç²’å­â€é€‰é¡¹ã€‚"
+"基于 GPU çš„ç²’å­ä¸å— GLES2 视频驱动程åºçš„支æŒã€‚\n"
+"改为使用 CPUParticles 节点。为此,您å¯ä»¥ä½¿ç”¨ “Convert to CPUParticles†选项。"
#: scene/3d/particles.cpp
msgid ""
"Nothing is visible because meshes have not been assigned to draw passes."
-msgstr "ç²’å­ä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼(meshe)指定到绘制通é“(draw passes)。"
+msgstr "ç²’å­ä¸å¯è§ï¼Œå› ä¸ºæ²¡æœ‰ç½‘æ ¼æŒ‡å®šåˆ°ç»˜åˆ¶é€šé“ (Draw Pass)。"
#: scene/3d/particles.cpp
msgid ""
"Particles animation requires the usage of a SpatialMaterial whose Billboard "
"Mode is set to \"Particle Billboard\"."
msgstr ""
-"ç²’å­åŠ¨ç”»éœ€è¦ä½¿ç”¨SpatialMaterial,其“公告牌模å¼â€è®¾ç½®ä¸ºâ€œ Particle Billboardâ€ã€‚"
+"ç²’å­åŠ¨ç”»éœ€è¦ä½¿ç”¨ Billboard Mode 设置为 “Particle Billboard†的 "
+"SpatialMaterial。"
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
-msgstr "PathFollow类型的节点åªæœ‰ä½œä¸ºPath类型节点的å­èŠ‚点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
+msgstr "PathFollow 类型的节点åªæœ‰ä½œä¸º Path 类型节点的å­èŠ‚点æ‰èƒ½æ­£å¸¸å·¥ä½œã€‚"
#: scene/3d/path.cpp
msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
-"PathFollow çš„ ROTATION_ORIENTED è¦æ±‚在其父路径的 Curve 资æºä¸­å¯ç”¨â€œå‘上矢é‡â€ã€‚"
+"PathFollow çš„ ROTATION_ORIENTED è¦æ±‚在其父路径的 Curve 资æºä¸­å¯ç”¨ “Up "
+"Vectorâ€ã€‚"
#: scene/3d/physics_body.cpp
msgid ""
@@ -12456,15 +12495,16 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
-"对RigidBody(在character或rigid模å¼ä¸‹ï¼‰çš„尺寸修改,在è¿è¡Œæ—¶ä¼šè¢«ç‰©ç†å¼•æ“Žçš„覆"
-"盖。\n"
+"对 RigidBody(在 Character 或 Rigid 模å¼ä¸‹ï¼‰çš„尺寸修改,在è¿è¡Œæ—¶ä¼šè¢«ç‰©ç†å¼•æ“Ž"
+"的覆盖。\n"
"建议您修改å­èŠ‚点的碰撞形状。"
#: scene/3d/remote_transform.cpp
msgid ""
"The \"Remote Path\" property must point to a valid Spatial or Spatial-"
"derived node to work."
-msgstr "“远程路径â€å±žæ€§å¿…须指å‘有效的Spatial或Spatial派生的节点æ‰èƒ½å·¥ä½œã€‚"
+msgstr ""
+"“Remote Path†属性必须指å‘有效的 Spatial 或 Spatial 派生的节点æ‰èƒ½å·¥ä½œã€‚"
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
@@ -12484,7 +12524,7 @@ msgid ""
"A SpriteFrames resource must be created or set in the \"Frames\" property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"必须在“Framesâ€å±žæ€§ä¸­åˆ›å»ºæˆ–设置 SpriteFrames 资æºï¼ŒAnimatedSprite3D æ‰ä¼šæ˜¾ç¤º"
+"必须在 “Frames†属性中创建或设置 SpriteFrames 资æºï¼ŒAnimatedSprite3D æ‰ä¼šæ˜¾ç¤º"
"帧。"
#: scene/3d/vehicle_body.cpp
@@ -12492,52 +12532,53 @@ msgid ""
"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
"it as a child of a VehicleBody."
msgstr ""
-"VehicleWheel 为 VehicleBody æ供一个车轮系统(Wheel System)。请将它作为"
-"VehicleBodyçš„å­èŠ‚点。"
+"VehicleWheel 为 VehicleBody æ供一个车轮系统 (Wheel System)。请将它作为 "
+"VehicleBody çš„å­èŠ‚点。"
#: scene/3d/world_environment.cpp
msgid ""
"WorldEnvironment requires its \"Environment\" property to contain an "
"Environment to have a visible effect."
msgstr ""
-"WorldEnvironment è¦æ±‚其“Environmentâ€å±žæ€§æ˜¯ä¸€ä¸ª Environment,以产生å¯è§æ•ˆæžœã€‚"
+"WorldEnvironment è¦æ±‚å…¶ “Environment†属性是一个 Environment,以产生å¯è§æ•ˆ"
+"果。"
#: scene/3d/world_environment.cpp
msgid ""
"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
-msgstr "æ¯ä¸ªåœºæ™¯ä¸­åªå…许有一个WorldEnvironment类型的节点。"
+msgstr "æ¯ä¸ªåœºæ™¯ä¸­åªå…许有一个 WorldEnvironment 类型的节点。"
#: scene/3d/world_environment.cpp
msgid ""
"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set "
"this environment's Background Mode to Canvas (for 2D scenes)."
msgstr ""
-"这个WorldEnvironment被忽略。添加摄åƒå¤´ï¼ˆç”¨äºŽ3D场景)或将此环境的背景模å¼è®¾ç½®"
-"为画布(用于2D场景)。"
+"这个 WorldEnvironment 被忽略。添加摄åƒå¤´ï¼ˆç”¨äºŽ 3D 场景)或将此环境的背景模å¼"
+"设置为画布(用于 2D 场景)。"
#: scene/animation/animation_blend_tree.cpp
msgid "On BlendTree node '%s', animation not found: '%s'"
-msgstr "在 BlendTree 节点 '%s' 上没有å‘现动画: '%s'"
+msgstr "在 BlendTree 节点 “%s†上没有å‘现动画: “%sâ€"
#: scene/animation/animation_blend_tree.cpp
msgid "Animation not found: '%s'"
-msgstr "没有动画: '%s'"
+msgstr "没有动画: “%sâ€"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
-msgstr "在节点 '%s' 上的动画无效: '%s' 。"
+msgstr "在节点 “%s†上的动画无效: “%s†。"
#: scene/animation/animation_tree.cpp
msgid "Invalid animation: '%s'."
-msgstr "无效动画: '%s' 。"
+msgstr "无效动画: “%s†。"
#: scene/animation/animation_tree.cpp
msgid "Nothing connected to input '%s' of node '%s'."
-msgstr "没有任何物体连接到节点 '%s' 的输入 '%s' 。"
+msgstr "没有任何物体连接到节点 “%s†的输入 “%s†。"
#: scene/animation/animation_tree.cpp
msgid "No root AnimationNode for the graph is set."
-msgstr "没有为图设置根AnimationNode。"
+msgstr "没有为图设置根 AnimationNode。"
#: scene/animation/animation_tree.cpp
msgid "Path to an AnimationPlayer node containing animations is not set."
@@ -12549,11 +12590,11 @@ msgstr "动画播放器的路径没有加载一个 AnimationPlayer 节点。"
#: scene/animation/animation_tree.cpp
msgid "The AnimationPlayer root node is not a valid node."
-msgstr "AnimationPlayer根节点ä¸æ˜¯æœ‰æ•ˆèŠ‚点。"
+msgstr "AnimationPlayer 根节点ä¸æ˜¯æœ‰æ•ˆèŠ‚点。"
#: scene/animation/animation_tree_player.cpp
msgid "This node has been deprecated. Use AnimationTree instead."
-msgstr "该节点已废弃。请使用Animation Tree代替。"
+msgstr "该节点已废弃。请使用 AnimationTree 代替。"
#: scene/gui/color_picker.cpp
msgid ""
@@ -12591,20 +12632,20 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
-"除éžè„šæœ¬é…置其å­ä»£æ”¾ç½®è¡Œä¸ºï¼Œå¦åˆ™å®¹å™¨æœ¬èº«æ²¡æœ‰ä»»ä½•ä½œç”¨ã€‚\n"
-"如果您ä¸æƒ³æ·»åŠ è„šæœ¬ï¼Œè¯·æ”¹ç”¨æ™®é€šçš„Control节点。"
+"除éžè„šæœ¬é…置其å­èŠ‚点放置行为,å¦åˆ™å®¹å™¨æœ¬èº«æ²¡æœ‰ä»»ä½•ä½œç”¨ã€‚\n"
+"如果您ä¸æƒ³æ·»åŠ è„šæœ¬ï¼Œè¯·æ”¹ç”¨æ™®é€šçš„ Control 节点。"
#: scene/gui/control.cpp
msgid ""
"The Hint Tooltip won't be displayed as the control's Mouse Filter is set to "
"\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."
msgstr ""
-"由于该控件的 Mouse Filter 设置为 \"Ignore\" 因此它的 Hint Tooltip å°†ä¸ä¼šå±•"
-"示。将 Mouse Filter 设置为 \"Stop\" 或 \"Pass\" å¯ä¿®æ­£æ­¤é—®é¢˜ã€‚"
+"由于该控件的 Mouse Filter 设置为 “Ignore†因此将ä¸ä¼šæ˜¾ç¤ºé«˜äº®å·¥å…·æ示。将 "
+"Mouse Filter 设置为 “Stop†或 “Pass†å¯ä¿®æ­£æ­¤é—®é¢˜ã€‚"
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr "æ示ï¼"
+msgstr "警告ï¼"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
@@ -12616,12 +12657,12 @@ msgid ""
"functions. Making them visible for editing is fine, but they will hide upon "
"running."
msgstr ""
-"默认情况下,弹出窗å£å°†éšè—,除éžæ‚¨è°ƒç”¨popup()或任何popup *()函数。使它们"
-"å¯è§ä»¥è¿›è¡Œç¼–辑是å¯ä»¥çš„,但是它们会在è¿è¡Œæ—¶éšè—。"
+"弹窗将默认éšè—,除éžè°ƒç”¨ popup() 或任何 popup*() 函数。虽然å¯ä»¥å°†å¼¹çª—设为å¯è§"
+"æ¥è¿›è¡Œç¼–辑,但在è¿è¡Œæ—¶ä¼šéšè—。"
#: scene/gui/range.cpp
msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
-msgstr "如果å¯ç”¨äº†â€œ Exp Editâ€ï¼Œåˆ™â€œ Min Valueâ€å¿…须大于0。"
+msgstr "如果å¯ç”¨äº† “Exp Editâ€ï¼Œåˆ™ “Min Value†必须大于 0。"
#: scene/gui/scroll_container.cpp
msgid ""
@@ -12629,19 +12670,21 @@ msgid ""
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer旨在与å•ä¸ªå­æŽ§ä»¶ä¸€èµ·ä½¿ç”¨ã€‚\n"
-"å­èŠ‚点应该是å•ä¸ªå®¹å™¨ï¼ˆVBoxã€HBox等)或者使用å•ä¸ªæŽ§ä»¶å¹¶æ‰‹åŠ¨è®¾ç½®å…¶è‡ªå®šä¹‰æœ€å°å°º"
+"ScrollContainer 适用于与å•ä¸ªå­æŽ§ä»¶ä¸€èµ·ä½¿ç”¨ã€‚\n"
+"å­èŠ‚点应该是å•ä¸ªå®¹å™¨ï¼ˆVBox, HBox 等)或者使用å•ä¸ªæŽ§ä»¶å¹¶æ‰‹åŠ¨è®¾ç½®å…¶è‡ªå®šä¹‰æœ€å°å°º"
"寸。"
#: scene/gui/tree.cpp
msgid "(Other)"
-msgstr "(其它)"
+msgstr "(其它)"
#: scene/main/scene_tree.cpp
msgid ""
"Default Environment as specified in Project Settings (Rendering -> "
"Environment -> Default Environment) could not be loaded."
-msgstr "无法加载项目设置中的默认环境,详è§ï¼ˆæ¸²æŸ“->视图->默认环境)。"
+msgstr ""
+"无法加载项目设置中的默认环境 (Rendering -> Environment -> Default "
+"Environment)。"
#: scene/main/viewport.cpp
msgid ""
@@ -12650,13 +12693,13 @@ msgid ""
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
-"这个 Viewport 未被设置为渲染目标(render target)。如果你刻æ„打算让其直接在å±"
-"幕上显示其内容,使其æˆä¸ºå­æŽ§ä»¶çš„所以它å¯ä»¥æœ‰ä¸€ä¸ªå°ºå¯¸å¤§å°å€¼ã€‚å¦åˆ™è¯·å°†å…¶è®¾ç½®ä¸º "
-"RenderTarget,并将其内部纹ç†åˆ†é…给其它节点显示。"
+"这个 Viewport 未被设置为渲染目标。如果你想让其直接在å±å¹•ä¸Šæ˜¾ç¤ºå†…容,请使其æˆ"
+"为 Control çš„å­èŠ‚点,这样一æ¥è¯¥ Viewport æ‰ä¼šæœ‰å¤§å°ã€‚å¦åˆ™è¯·ä¸ºå…¶è®¾ç½® "
+"RenderTarget 并分é…其内部纹ç†æ¥æ˜¾ç¤ºã€‚"
#: scene/main/viewport.cpp
msgid "Viewport size must be greater than 0 to render anything."
-msgstr "Viewport大å°å¤§äºŽ0æ—¶æ‰èƒ½è¿›è¡Œæ¸²æŸ“。"
+msgstr "Viewport 大å°å¤§äºŽ 0 æ—¶æ‰èƒ½è¿›è¡Œæ¸²æŸ“。"
#: scene/resources/visual_shader_nodes.cpp
msgid "Invalid source for preview."
@@ -12676,7 +12719,7 @@ msgstr "对函数的赋值。"
#: servers/visual/shader_language.cpp
msgid "Assignment to uniform."
-msgstr "对uniform的赋值。"
+msgstr "对统一的赋值。"
#: servers/visual/shader_language.cpp
msgid "Varyings can only be assigned in vertex function."
@@ -12686,6 +12729,12 @@ msgstr "å˜é‡åªèƒ½åœ¨é¡¶ç‚¹å‡½æ•°ä¸­æŒ‡å®šã€‚"
msgid "Constants cannot be modified."
msgstr "ä¸å…许修改常é‡ã€‚"
+#~ msgid "Error trying to save layout!"
+#~ msgstr "ä¿å­˜å¸ƒå±€å‡ºé”™ï¼"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "覆盖编辑器默认布局。"
+
#~ msgid "Move pivot"
#~ msgstr "移动轴心点"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index cfc8abfafa..1104fb0ee9 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -1071,14 +1071,17 @@ msgstr ""
#: editor/dependency_editor.cpp
#, fuzzy
-msgid "Remove selected files from the project? (Can't be restored)"
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "從專案中刪除所é¸çš„檔案?(此動作無法復原)"
#: editor/dependency_editor.cpp
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
#: editor/dependency_editor.cpp
@@ -2389,12 +2392,16 @@ msgid "Error saving TileSet!"
msgstr "儲存TileSet時出ç¾éŒ¯èª¤ï¼"
#: editor/editor_node.cpp
-#, fuzzy
-msgid "Error trying to save layout!"
-msgstr "儲存佈局時出ç¾éŒ¯èª¤ï¼"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
msgstr ""
#: editor/editor_node.cpp
@@ -2403,7 +2410,7 @@ msgstr "未找到佈局å稱ï¼"
#: editor/editor_node.cpp
#, fuzzy
-msgid "Restored default layout to base settings."
+msgid "Restored the Default layout to its base settings."
msgstr "é‡è¨­é è¨­ä½ˆå±€ã€‚"
#: editor/editor_node.cpp
@@ -3861,6 +3868,11 @@ msgid "Move To..."
msgstr "æ¬åˆ°..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "移動Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "新增場景..."
@@ -12365,6 +12377,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -12410,6 +12430,22 @@ msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to complete APK alignment."
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Unable to delete unaligned APK."
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
msgstr ""
@@ -13101,6 +13137,10 @@ msgid "Constants cannot be modified."
msgstr ""
#, fuzzy
+#~ msgid "Error trying to save layout!"
+#~ msgstr "儲存佈局時出ç¾éŒ¯èª¤ï¼"
+
+#, fuzzy
#~ msgid "Move pivot"
#~ msgstr "上移"
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index e579ce7d7c..1174e8f484 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -29,7 +29,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2020-10-11 17:17+0000\n"
+"PO-Revision-Date: 2020-11-17 11:07+0000\n"
"Last-Translator: BinotaLIU <me@binota.org>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant/>\n"
@@ -38,7 +38,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.3-dev\n"
+"X-Generator: Weblate 4.4-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -61,15 +61,15 @@ msgstr "é‹ç®—å¼ä¸­çš„輸入 %i 無效 (未傳éžï¼‰"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "該實體為 null,無法使用 self"
+msgstr "該實體為 null,無法使用 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"
-msgstr "在型別 %s ã€åŸºç¤Žé¡žåž‹ %s 上存å–了無效的索引"
+msgstr "索引型別 %s å°åŸºç¤Žé¡žåž‹ %s 無效"
#: core/math/expression.cpp
msgid "Invalid named index '%s' for base type %s"
@@ -307,7 +307,7 @@ msgstr "觸發程åº"
#: editor/animation_track_editor.cpp
msgid "Capture"
-msgstr "截圖"
+msgstr "截å–"
#: editor/animation_track_editor.cpp
msgid "Nearest"
@@ -324,11 +324,11 @@ msgstr "立方體"
#: editor/animation_track_editor.cpp
msgid "Clamp Loop Interp"
-msgstr "Clamp å¼å…§æ’循環"
+msgstr "鉗制內æ’循環 (Clamp)"
#: editor/animation_track_editor.cpp
msgid "Wrap Loop Interp"
-msgstr "Wrap å¼å…§æ’循環"
+msgstr "無縫內æ’循環 (Wrap)"
#: editor/animation_track_editor.cpp
#: editor/plugins/canvas_item_editor_plugin.cpp
@@ -389,15 +389,15 @@ msgstr "AnimationPlayer ä¸èƒ½æ’­æ”¾è‡ªå·±ï¼Œåªå¯æ’­æ”¾å…¶ä»– Player。"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
-msgstr "新增ï¼æ’入動畫"
+msgstr "新增並æ’入動畫"
#: editor/animation_track_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr "動畫新增軌跡與畫格"
+msgstr "新增動畫軌é“與關éµç•«æ ¼"
#: editor/animation_track_editor.cpp
msgid "Anim Insert Key"
-msgstr "新增關éµç•«æ ¼"
+msgstr "新增動畫關éµç•«æ ¼"
#: editor/animation_track_editor.cpp
msgid "Change Animation Step"
@@ -437,7 +437,7 @@ msgstr "沒有根節點時無法新增軌é“"
#: editor/animation_track_editor.cpp
msgid "Invalid track for Bezier (no suitable sub-properties)"
-msgstr "å°æ–¼è²èŒ²æ›²ç·šç„¡æ•ˆçš„軌é“(éžé©ç”¨ä¹‹å­å±¬æ€§ï¼‰"
+msgstr "ä¸å¯ç”¨æ–¼è²èŒ²æ›²ç·šçš„軌é“(無é©ç”¨ä¹‹å­å±¬æ€§ï¼‰"
#: editor/animation_track_editor.cpp
msgid "Add Bezier Track"
@@ -477,7 +477,7 @@ msgstr "移動動畫關éµç•«æ ¼"
#: editor/animation_track_editor.cpp
msgid "Clipboard is empty"
-msgstr "空白剪貼æ¿"
+msgstr "剪貼æ¿ç‚ºç©º"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
@@ -490,7 +490,7 @@ msgstr "動畫縮放關éµå½±æ ¼"
#: editor/animation_track_editor.cpp
msgid ""
"This option does not work for Bezier editing, as it's only a single track."
-msgstr "該é¸é …ä¸é©ç”¨æ–¼ç·¨è¼¯è²èŒ²æ›²ç·šï¼Œå…¶åƒ…有單一軌é“。"
+msgstr "該é¸é …ä¸é©ç”¨è²èŒ²æ›²ç·šç·¨è¼¯ï¼Œå› æ›²ç·šåƒ…有單一軌é“。"
#: editor/animation_track_editor.cpp
msgid ""
@@ -509,7 +509,7 @@ msgstr ""
"è‹¥è¦é–‹å•Ÿã€ŒåŠ å…¥å®¢åˆ¶è»Œã€çš„功能,請在場景在匯入設定中將 [Animation] -> "
"[Storage] 設定為\n"
"[Files],並啟用 [Animation] -> [Keep Custom Tracks],然後é‡æ–°åŒ¯å…¥ã€‚\n"
-"å¦å¯ä½¿ç”¨æœƒå°‡å‹•ç•«åŒ¯å…¥ç¨ç«‹æª”案的匯入é è¨­è¨­å®šã€‚"
+"或者也å¯ä½¿ç”¨æœƒå°‡å‹•ç•«åŒ¯å…¥ç¨ç«‹æª”案的匯入é è¨­è¨­å®šã€‚"
#: editor/animation_track_editor.cpp
msgid "Warning: Editing imported animation"
@@ -612,11 +612,11 @@ msgstr "最佳化動畫工具"
#: editor/animation_track_editor.cpp
msgid "Max. Linear Error:"
-msgstr "最大線性錯誤:"
+msgstr "最大線性誤差:"
#: editor/animation_track_editor.cpp
msgid "Max. Angular Error:"
-msgstr "最大角度錯誤:"
+msgstr "最大角度誤差:"
#: editor/animation_track_editor.cpp
msgid "Max Optimizable Angle:"
@@ -770,13 +770,13 @@ msgstr "必須指定目標節點方法。"
#: editor/connections_dialog.cpp
msgid "Method name must be a valid identifier."
-msgstr "方法å稱必須為有效識別符。"
+msgstr "方法å稱必須為有效識別項。"
#: editor/connections_dialog.cpp
msgid ""
"Target method not found. Specify a valid method or attach a script to the "
"target node."
-msgstr "找ä¸åˆ°ç›®æ¨™æ–¹æ³•ï¼è«‹æŒ‡å®šä¸€å€‹æœ‰æ•ˆçš„方法ã€æˆ–將腳本附加至目標節點上。"
+msgstr "找ä¸åˆ°ç›®æ¨™æ–¹æ³•ï¼è«‹æŒ‡å®šä¸€å€‹æœ‰æ•ˆçš„方法,或將腳本附加至目標節點上。"
#: editor/connections_dialog.cpp
msgid "Connect to Node:"
@@ -1037,16 +1037,21 @@ msgid "Owners Of:"
msgstr "為下列之æ“有者:"
#: editor/dependency_editor.cpp
-msgid "Remove selected files from the project? (Can't be restored)"
+#, fuzzy
+msgid ""
+"Remove selected files from the project? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr "確定è¦å°‡æ‰€é¸æª”案自專案中移除嗎?(無法復原)"
#: editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
-"Remove them anyway? (no undo)"
+"Remove them anyway? (no undo)\n"
+"You can find the removed files in the system trash to restore them."
msgstr ""
-"有其他資æºéœ€è¦æ­£åœ¨åˆªé™¤çš„檔案以正常é‹ä½œã€‚\n"
+"有其他資æºéœ€è¦æ­£åœ¨åˆªé™¤çš„檔案æ‰èƒ½æ­£å¸¸é‹ä½œã€‚\n"
"ä¾ç„¶è¦ç§»é™¤å—Žï¼Ÿï¼ˆç„¡æ³•å¾©åŽŸï¼‰"
#: editor/dependency_editor.cpp
@@ -1059,7 +1064,7 @@ msgstr "載入時發生錯誤:"
#: editor/dependency_editor.cpp
msgid "Load failed due to missing dependencies:"
-msgstr "由於缺ä¹ä¸‹åˆ—相ä¾æ€§å…§å®¹è€Œç„¡æ³•è¼‰å…¥ï¼š"
+msgstr "缺ä¹ä¸‹åˆ—相ä¾æ€§å…§å®¹ï¼Œç„¡æ³•è¼‰å…¥ï¼š"
#: editor/dependency_editor.cpp editor/editor_node.cpp
msgid "Open Anyway"
@@ -1123,7 +1128,7 @@ msgstr "Godot Engine è²¢ç»è€…"
#: editor/editor_about.cpp
msgid "Project Founders"
-msgstr "專案創始人"
+msgstr "專案發起人"
#: editor/editor_about.cpp
msgid "Lead Developer"
@@ -1138,7 +1143,7 @@ msgstr "專案管ç†å“¡ "
#: editor/editor_about.cpp
msgid "Developers"
-msgstr "開發者"
+msgstr "開發人員"
#: editor/editor_about.cpp
msgid "Authors"
@@ -1216,7 +1221,7 @@ msgstr "ç„¡æ³•é–‹å•Ÿå¥—ä»¶æª”æ¡ˆï¼Œéž ZIP æ ¼å¼ã€‚"
#: editor/editor_asset_installer.cpp
msgid "%s (Already Exists)"
-msgstr "%s(已經存在)"
+msgstr "%s(已存在)"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
@@ -1249,7 +1254,7 @@ msgstr "安è£"
#: editor/editor_asset_installer.cpp
msgid "Package Installer"
-msgstr "套件安è£"
+msgstr "套件安è£ç¨‹å¼"
#: editor/editor_audio_buses.cpp
msgid "Speakers"
@@ -1269,7 +1274,7 @@ msgstr "更改音訊匯æµæŽ’音é‡"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Solo"
-msgstr "切æ›éŸ³è¨ŠåŒ¯æµæŽ’ Solo"
+msgstr "é–‹å•Ÿï¼é—œé–‰éŸ³è¨ŠåŒ¯æµæŽ’ç¨å¥"
#: editor/editor_audio_buses.cpp
msgid "Toggle Audio Bus Mute"
@@ -1301,7 +1306,7 @@ msgstr "拖放以é‡æ–°æŽ’列。"
#: editor/editor_audio_buses.cpp
msgid "Solo"
-msgstr "Solo"
+msgstr "ç¨å¥"
#: editor/editor_audio_buses.cpp
msgid "Mute"
@@ -1444,7 +1449,7 @@ msgstr "ä¸å¯èˆ‡ç¾å­˜çš„全域常數å稱è¡çªã€‚"
#: editor/editor_autoload_settings.cpp
msgid "Keyword cannot be used as an autoload name."
-msgstr "é—œéµå­—無法作為 Autoload å稱。"
+msgstr "ä¸å¯ä½¿ç”¨é—œéµå­—作為 Autoload å稱。"
#: editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
@@ -1456,7 +1461,7 @@ msgstr "é‡æ–°å‘½å Autoload"
#: editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr "觸發全域 AutoLoad"
+msgstr "é–‹å•Ÿï¼é—œé–‰å…¨åŸŸ AutoLoad"
#: editor/editor_autoload_settings.cpp
msgid "Move Autoload"
@@ -1596,33 +1601,30 @@ msgstr ""
"請在專案設定中啟用「Import Etcã€æˆ–是ç¦ç”¨ã€ŒDriver Fallback Enabledã€ã€‚"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
"'Import Pvrtc' in Project Settings."
msgstr ""
-"目標平å°ä¸Šçš„ GLES2 必須使用「ETCã€ç´‹ç†å£“縮。請在專案設定中啟用「Import "
-"Etcã€ã€‚"
+"目標平å°ä¸Šçš„ GLES2 必須使用「PVRTCã€ç´‹ç†å£“縮。請在專案設定中啟用「Import "
+"Pvrtcã€ã€‚"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
msgstr ""
-"目標平å°ä¸Šçš„ GLES3 必須使用「ETC2ã€ç´‹ç†å£“縮。請在專案設定中啟用「Import Etc "
-"2ã€ã€‚"
+"目標平å°ä¸Šçš„ GLES3 必須使用「ETC2ã€æˆ–「PVRTCã€ç´‹ç†å£“縮。請在專案設定中啟用"
+"「Import Etc 2ã€æˆ–「Import Pvrtcã€ã€‚"
#: editor/editor_export.cpp
-#, fuzzy
msgid ""
"Target platform requires 'PVRTC' texture compression for the driver fallback "
"to GLES2.\n"
"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
"Enabled'."
msgstr ""
-"目標平å°ä¸Šçš„ GLES2 回退驅動器功能必須使用「ETCã€ç´‹ç†å£“縮。\n"
-"請在專案設定中啟用「Import Etcã€æˆ–是ç¦ç”¨ã€ŒDriver Fallback Enabledã€ã€‚"
+"目標平å°ä¸Šçš„ GLES2 回退驅動器功能必須使用「PVRTCã€ç´‹ç†å£“縮。\n"
+"請在專案設定中啟用「Import Pvrtcã€æˆ–是ç¦ç”¨ã€ŒDriver Fallback Enabledã€ã€‚"
#: editor/editor_export.cpp platform/android/export/export.cpp
#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
@@ -1662,15 +1664,15 @@ msgstr "正在編輯場景樹"
#: editor/editor_feature_profile.cpp
msgid "Node Dock"
-msgstr "節點 Dock"
+msgstr "節點åœé§åˆ—"
#: editor/editor_feature_profile.cpp
msgid "FileSystem Dock"
-msgstr "檔案系統 Dock"
+msgstr "檔案系統åœé§åˆ—"
#: editor/editor_feature_profile.cpp
msgid "Import Dock"
-msgstr "匯入 Dock"
+msgstr "匯入åœé§åˆ—"
#: editor/editor_feature_profile.cpp
msgid "Erase profile '%s'? (no undo)"
@@ -1682,7 +1684,7 @@ msgstr "設定檔必須為有效檔å,且ä¸å¯åŒ…å«ã€Œ.ã€"
#: editor/editor_feature_profile.cpp
msgid "Profile with this name already exists."
-msgstr "已有相åŒå稱的設定檔存在。"
+msgstr "已存在相åŒå稱的設定檔。"
#: editor/editor_feature_profile.cpp
msgid "(Editor Disabled, Properties Disabled)"
@@ -1872,7 +1874,7 @@ msgstr "上一層"
#: editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr "顯示ï¼éš±è—éš±è—檔案"
+msgstr "顯示ï¼å–消顯示隱è—檔案"
#: editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
@@ -1904,7 +1906,7 @@ msgstr "å‰å¾€ä¸‹ä¸€å€‹è³‡æ–™å¤¾ã€‚"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Go to parent folder."
-msgstr "å‰å¾€ä¸Šå±¤è³‡æ–™å¤¾ã€‚"
+msgstr "å‰å¾€ä¸Šä¸€å±¤è³‡æ–™å¤¾ã€‚"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Refresh files."
@@ -1952,7 +1954,7 @@ msgstr "掃æ原始檔"
msgid ""
"There are multiple importers for different types pointing to file %s, import "
"aborted"
-msgstr "由於多個匯入器以ä¸åŒçš„型別指å‘檔案 %s,已中止匯入"
+msgstr "由於有多個匯入器å°æª”案 %s æ供了ä¸åŒçš„型別,已中止匯入"
#: editor/editor_file_system.cpp
msgid "(Re)Importing Assets"
@@ -2197,7 +2199,7 @@ msgstr "好"
#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
msgid "Error saving resource!"
-msgstr "ä¿å­˜è³‡æºéŒ¯èª¤ï¼"
+msgstr "ä¿å­˜è³‡æºæ™‚發生錯誤ï¼"
#: editor/editor_node.cpp
msgid ""
@@ -2255,7 +2257,7 @@ msgstr "正在建立縮圖"
#: editor/editor_node.cpp
msgid "This operation can't be done without a tree root."
-msgstr "無樹狀根目錄無法進行此æ“作。"
+msgstr "無樹狀根目錄時無法進行此æ“作。"
#: editor/editor_node.cpp
msgid ""
@@ -2273,7 +2275,7 @@ msgstr "無法ä¿å­˜å ´æ™¯ã€‚å¯èƒ½æ˜¯ç”±æ–¼ç›¸ä¾æ€§ï¼ˆå¯¦é«”或繼承)無法
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "Can't overwrite scene that is still open!"
-msgstr "無法複寫開啟中的場景ï¼"
+msgstr "無法複寫未關閉的場景ï¼"
#: editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
@@ -2289,22 +2291,28 @@ msgstr "無法加載è¦åˆä½µçš„圖塊集ï¼"
#: editor/editor_node.cpp
msgid "Error saving TileSet!"
-msgstr "ä¿å­˜ä¿å­˜åœ–塊集時發生錯誤ï¼"
+msgstr "ä¿å­˜åœ–塊集時發生錯誤ï¼"
#: editor/editor_node.cpp
-msgid "Error trying to save layout!"
-msgstr "嘗試ä¿å­˜é…置時出錯ï¼"
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
#: editor/editor_node.cpp
-msgid "Default editor layout overridden."
-msgstr "已覆蓋é è¨­çš„編輯器é…置。"
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
#: editor/editor_node.cpp
msgid "Layout name not found!"
msgstr "找ä¸åˆ°é…ç½®å稱ï¼"
#: editor/editor_node.cpp
-msgid "Restored default layout to base settings."
+#, fuzzy
+msgid "Restored the Default layout to its base settings."
msgstr "已將é è¨­é…置還原至基本設定。"
#: editor/editor_node.cpp
@@ -2314,7 +2322,7 @@ msgid ""
"understand this workflow."
msgstr ""
"該資æºå±¬æ–¼å·²åŒ¯å…¥çš„場景,因此ä¸å¯ç·¨è¼¯ã€‚ \n"
-"請閱讀有關匯入場景的說明文件以更瞭解該æµç¨‹ã€‚"
+"請閱讀有關匯入場景的說明文件以更瞭解該工作æµç¨‹ã€‚"
#: editor/editor_node.cpp
msgid ""
@@ -2338,7 +2346,7 @@ msgid ""
"understand this workflow."
msgstr ""
"該場景自外部匯入,因此åšå‡ºçš„改動將ä¸æœƒä¿å­˜ã€‚\n"
-"實例化或繼承後將å¯å°å…¶åšå‡ºä¿®æ”¹ã€‚\n"
+"實例化或繼承該場景å³å¯å°å…¶åšå‡ºä¿®æ”¹ã€‚\n"
"請閱讀與匯入相關的說明文件以更加瞭解該工作æµç¨‹ã€‚"
#: editor/editor_node.cpp
@@ -2348,7 +2356,7 @@ msgid ""
"this workflow."
msgstr ""
"該資æºè‡ªå¤–部匯入,因此åšå‡ºçš„改動將ä¸æœƒä¿å­˜ã€‚\n"
-"請閱讀有關åµéŒ¯çš„說明文件以更瞭解該æµç¨‹ã€‚"
+"請閱讀有關åµéŒ¯çš„說明文件以更瞭解該工作æµç¨‹ã€‚"
#: editor/editor_node.cpp
msgid "There is no defined scene to run."
@@ -2392,7 +2400,7 @@ msgstr "å·²ä¿å­˜ %s 個已修改的資æºã€‚"
#: editor/editor_node.cpp
msgid "A root node is required to save the scene."
-msgstr "ä¿å­˜å ´æ™¯éœ€è¦æ ¹ç¯€é»žã€‚"
+msgstr "必須有根節點æ‰å¯ä¿å­˜å ´æ™¯ã€‚"
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2412,7 +2420,7 @@ msgstr "此場景從未被ä¿å­˜ã€‚是å¦æ–¼åŸ·è¡Œå‰å…ˆä¿å­˜ï¼Ÿ"
#: editor/editor_node.cpp editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr "該æ“作必須è¦æœ‰å ´æ™¯æ‰å¯å®Œæˆã€‚"
+msgstr "å¿…é ˆè¦æœ‰å ´æ™¯æ‰å¯å®Œæˆè©²æ“作。"
#: editor/editor_node.cpp
msgid "Export Mesh Library"
@@ -2482,7 +2490,7 @@ msgstr "開啟專案管ç†å“¡å‰è¦å…ˆä¿å­˜ä»¥ä¸‹å ´æ™¯å—Žï¼Ÿ"
msgid ""
"This option is deprecated. Situations where refresh must be forced are now "
"considered a bug. Please report."
-msgstr "該é¸é …å·²åœæ­¢ç¶­è­·ã€‚ç›®å‰å·²å°‡éœ€å¼·åˆ¶é‡æ–°æ•´ç†ä¹‹ç‹€æ³è¦–為 Bug,請回報該å•é¡Œã€‚"
+msgstr "該é¸é …å·²åœæ­¢ç¶­è­·ã€‚ç›®å‰å·²å°‡éœ€å¼·åˆ¶é‡æ–°æ•´ç†çš„情æ³è¦–為 Bug,請回報該å•é¡Œã€‚"
#: editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -2634,7 +2642,7 @@ msgstr "其他 %d 個檔案"
#: editor/editor_node.cpp
msgid "Dock Position"
-msgstr "Dock ä½ç½®"
+msgstr "åœé§åˆ—ä½ç½®"
#: editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -2674,7 +2682,7 @@ msgstr "篩é¸æª”案..."
#: editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr "æ“作場景文件。"
+msgstr "æ“作場景檔案。"
#: editor/editor_node.cpp
msgid "New Scene"
@@ -2792,7 +2800,7 @@ msgstr ""
"當開啓該é¸é …後,一éµéƒ¨ç½²æ‰€ç”¢ç”Ÿçš„執行檔會嘗試連線至本電腦之 IP ä½ç½®ä»¥å°åŸ·è¡Œä¸­"
"的專案進行除錯。\n"
"該é¸é …旨在進行é ç«¯é™¤éŒ¯ï¼ˆé€šå¸¸é…åˆè¡Œå‹•è£ç½®ä½¿ç”¨ï¼‰ã€‚\n"
-"è‹¥è¦ä½¿ç”¨æœ¬æ©Ÿ GDScript 除錯工具,則ä¸è¨±å•Ÿç”¨è©²é¸é …。"
+"è‹¥è¦ä½¿ç”¨æœ¬æ©Ÿ GDScript 除錯工具,則ä¸éœ€å•Ÿç”¨è©²é¸é …。"
#: editor/editor_node.cpp
msgid "Small Deploy with Network Filesystem"
@@ -2809,8 +2817,8 @@ msgid ""
msgstr ""
"啟用該é¸é …後,一éµéƒ¨ç½²è‡³ Android 時的å¯åŸ·è¡Œæª”å°‡ä¸æœƒåŒ…å«å°ˆæ¡ˆè³‡æ–™ã€‚\n"
"專案之檔案系統將由本編輯器é€éŽç¶²è·¯æ供。\n"
-"部署至 Android å¹³å°éœ€ä½¿ç”¨ USB 線以ç²å¾—更快速的效能。該é¸é …é©ç”¨æ–¼æœ‰å¤§åž‹ç´ æçš„"
-"專案,å¯åŠ é€Ÿæ¸¬è©¦ã€‚"
+"部署至 Android å¹³å°éœ€ä½¿ç”¨ USB 線以ç²å¾—更快速的效能。該é¸é …用於有大型素æçš„å°ˆ"
+"案時å¯åŠ é€Ÿæ¸¬è©¦ã€‚"
#: editor/editor_node.cpp
msgid "Visible Collision Shapes"
@@ -2890,7 +2898,7 @@ msgstr "é–‹å•Ÿï¼é—œé–‰ç³»çµ±ä¸»æŽ§å°"
#: editor/editor_node.cpp
msgid "Open Editor Data/Settings Folder"
-msgstr "é–‹å•Ÿ 編輯器資料ï¼ç·¨è¼¯å™¨è¨­å®š 資料夾"
+msgstr "開啟編輯器資料ï¼ç·¨è¼¯å™¨è¨­å®šè³‡æ–™å¤¾"
#: editor/editor_node.cpp
msgid "Open Editor Data Folder"
@@ -3192,7 +3200,7 @@ msgstr "全部"
#: editor/editor_profiler.cpp
msgid "Self"
-msgstr "自身"
+msgstr "僅自己"
#: editor/editor_profiler.cpp
msgid "Frame #:"
@@ -3220,7 +3228,7 @@ msgstr "圖層"
#: editor/editor_properties.cpp
msgid "Bit %d, value %d"
-msgstr "ä½ %d,值 %d"
+msgstr "ä½å…ƒ %d,值 %d"
#: editor/editor_properties.cpp
msgid "[Empty]"
@@ -3238,14 +3246,14 @@ msgstr "無效的 RID"
msgid ""
"The selected resource (%s) does not match any type expected for this "
"property (%s)."
-msgstr "所é¸çš„資æºï¼ˆ%s)並ä¸ç¬¦åˆä»»è©²å±¬æ€§ï¼ˆ%s)的任何型別。"
+msgstr "所é¸è³‡æºï¼ˆ%s)ä¸ç¬¦åˆä»»è©²å±¬æ€§ï¼ˆ%s)的任何型別。"
#: editor/editor_properties.cpp
msgid ""
"Can't create a ViewportTexture on resources saved as a file.\n"
"Resource needs to belong to a scene."
msgstr ""
-"無法為欲ä¿å­˜ç‚ºæª”案之資æºå»ºç«‹ ViewportTexture。\n"
+"無法為欲ä¿å­˜æˆæª”案之資æºå»ºç«‹ ViewportTexture。\n"
"資æºå¿…須屬於一個場景。"
#: editor/editor_properties.cpp
@@ -3255,7 +3263,7 @@ msgid ""
"Please switch on the 'local to scene' property on it (and all resources "
"containing it up to a node)."
msgstr ""
-"無法為該資æºå»ºç«‹æª¢è¦–å€ç´‹ç† (ViewportTexture),因其未設定å°æ‡‰çš„本地場景。\n"
+"無法為該資æºå»ºç«‹ ViewportTexture,因其未設定為å°æ‡‰æœ¬æ©Ÿä¹‹å ´æ™¯ã€‚\n"
"請開啟其(與其至節點的所有資æºï¼‰ã€ŒLocal to Sceneã€å±¬æ€§ã€‚"
#: editor/editor_properties.cpp editor/property_editor.cpp
@@ -3332,7 +3340,7 @@ msgid ""
"as runnable."
msgstr ""
"為找到å¯åŸ·è¡Œæ–¼è©²å¹³å°çš„匯出é è¨­è¨­å®šã€‚\n"
-"請在 [匯出] é¸å–®ä¸­æ–°å¢žä¸€å€‹å¯åŸ·è¡Œçš„é è¨­è¨­å®šï¼Œæœƒå°‡ç¾æœ‰çš„é è¨­è¨­å®šè¨­ç‚ºå¯åŸ·è¡Œã€‚"
+"請在 [匯出] é¸å–®ä¸­æ–°å¢žä¸€å€‹å¯åŸ·è¡Œçš„é è¨­è¨­å®šï¼Œæˆ–å°‡ç¾æœ‰çš„é è¨­è¨­å®šè¨­ç‚ºå¯åŸ·è¡Œã€‚"
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
@@ -3360,7 +3368,7 @@ msgstr "是å¦æœªæ–°å¢žã€Œ_runã€æ–¹æ³•ï¼Ÿ"
#: editor/editor_spin_slider.cpp
msgid "Hold Ctrl to round to integers. Hold Shift for more precise changes."
-msgstr "æŒ‰ä½ Ctrl 以å–æ•´æ•¸ã€‚æŒ‰ä½ Shift 以使用更精確的改動。"
+msgstr "æŒ‰ä½ Ctrl 以å–æ•´æ•¸ã€‚æŒ‰ä½ Shift 以進行更精確的改動。"
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3533,7 +3541,7 @@ msgstr "已連線"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Requesting..."
-msgstr "正在請求…"
+msgstr "正在è¦æ±‚…"
#: editor/export_template_manager.cpp
msgid "Downloading"
@@ -3597,7 +3605,7 @@ msgstr "狀態:檔案匯入失敗。請修正檔案並手動é‡æ–°åŒ¯å…¥ã€‚"
#: editor/filesystem_dock.cpp
msgid "Cannot move/rename resources root."
-msgstr "無法移動ï¼é‡æ–°å‘½å根資æºã€‚"
+msgstr "無法移動或é‡æ–°å‘½å根資æºã€‚"
#: editor/filesystem_dock.cpp
msgid "Cannot move a folder into itself."
@@ -3692,6 +3700,11 @@ msgid "Move To..."
msgstr "移動至..."
#: editor/filesystem_dock.cpp
+#, fuzzy
+msgid "Move to Trash"
+msgstr "移動 Autoload"
+
+#: editor/filesystem_dock.cpp
msgid "New Scene..."
msgstr "新增場景..."
@@ -3866,7 +3879,7 @@ msgstr "群組中的節點"
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
-msgstr "空群組將被自動移除。"
+msgstr "空群組將自動移除。"
#: editor/groups_editor.cpp
msgid "Group Editor"
@@ -3943,11 +3956,11 @@ msgstr "無法載入 Post-Import 腳本:"
#: editor/import/resource_importer_scene.cpp
msgid "Invalid/broken script for post-import (check console):"
-msgstr "匯入後腳本無效或æ毀(請檢查主控å°ï¼‰ï¼š"
+msgstr "Post-Import 腳本無效或æ毀(請檢查主控å°ï¼‰ï¼š"
#: editor/import/resource_importer_scene.cpp
msgid "Error running post-import script:"
-msgstr "執行匯入後腳本時發生錯誤:"
+msgstr "執行 Post-Import 腳本時發生錯誤:"
#: editor/import/resource_importer_scene.cpp
msgid "Did you return a Node-derived object in the `post_import()` method?"
@@ -4171,11 +4184,11 @@ msgstr "移動節點頂點"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Limits"
-msgstr "修改混åˆç©ºé–“ 1D é™åˆ¶"
+msgstr "修改 BlendSpace1D é™åˆ¶"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Change BlendSpace1D Labels"
-msgstr "修改混åˆç©ºé–“ 1D 標籤"
+msgstr "修改 BlendSpace1D 標籤"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4195,11 +4208,11 @@ msgstr "新增動畫頂點"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Remove BlendSpace1D Point"
-msgstr "移除混åˆç©ºé–“ 1D 頂點"
+msgstr "移除 BlendSpace1D 頂點"
#: editor/plugins/animation_blend_space_1d_editor.cpp
msgid "Move BlendSpace1D Node Point"
-msgstr "移動混åˆç©ºé–“ 1D 節點頂點"
+msgstr "移動 BlendSpace1D 節點頂點"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
@@ -4209,7 +4222,7 @@ msgid ""
"AnimationTree is inactive.\n"
"Activate to enable playback, check node warnings if activation fails."
msgstr ""
-"動畫樹未啟用。\n"
+"AnimationTree 未啟用。\n"
"請先啟用以播放,若啟用失敗請檢查節點警告訊æ¯ã€‚"
#: editor/plugins/animation_blend_space_1d_editor.cpp
@@ -4220,7 +4233,7 @@ msgstr "在此空間中設定混åˆä½ç½®"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Select and move points, create points with RMB."
-msgstr "é¸æ“‡èˆ‡ç§»å‹•é ‚點,使用滑鼠å³éµå»ºç«‹é ‚點。"
+msgstr "é¸æ“‡ä¸¦ç§»å‹•é ‚點,使用滑鼠å³éµå»ºç«‹é ‚點。"
#: editor/plugins/animation_blend_space_1d_editor.cpp
#: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp
@@ -4313,7 +4326,7 @@ msgstr "輸出節點無法被新增至混åˆæ¨¹ã€‚"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Add Node to BlendTree"
-msgstr "新增節點至混åˆæ¨¹"
+msgstr "新增節點至 BlendTree"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Node Moved"
@@ -4442,7 +4455,7 @@ msgstr "é‡æ–°å‘½åå‹•ç•«"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr "æ··åˆä¸‹ä¸€å€‹æ”¹å‹•"
+msgstr "æ··åˆä¸‹ä¸€å€‹æ›´æ”¹"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
@@ -4570,7 +4583,7 @@ msgstr "僅顯示差異"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Force White Modulate"
-msgstr "強制使用白色調整"
+msgstr "強制使用白色調變"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Include Gizmos (3D)"
@@ -4688,11 +4701,11 @@ msgstr "移除所é¸çš„節點或轉場。"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Toggle autoplay this animation on start, restart or seek to zero."
-msgstr "é–‹å•Ÿï¼é—œé–‰è‡ªå‹•æ’­æ”¾å‹•ç•«æ–¼é–‹å§‹ã€é‡æ–°å•Ÿå‹•æˆ–æœå°‹è‡³ 0 時。"
+msgstr "é–‹å•Ÿï¼å–消動畫在開始ã€é‡æ–°å•Ÿå‹•æˆ–æœå°‹è‡³ 0 時的自動播放。"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set the end animation. This is useful for sub-transitions."
-msgstr "設定çµå°¾å‹•ç•«ã€‚å°æ–¼å­è½‰å ´å¾ˆæœ‰ç”¨ã€‚"
+msgstr "設定çµå°¾å‹•ç•«ã€‚é©ç”¨æ–¼å­è½‰å ´ã€‚"
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition: "
@@ -4869,11 +4882,11 @@ msgstr "無法解æžä¸»æ©Ÿå稱:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
-msgstr "請求失敗,回傳代碼:"
+msgstr "è¦æ±‚失敗,回傳代碼:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed."
-msgstr "請求失敗。"
+msgstr "è¦æ±‚失敗。"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Cannot save response to:"
@@ -4885,7 +4898,7 @@ msgstr "寫入錯誤。"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, too many redirects"
-msgstr "請求失敗,éŽå¤šé‡æ–°å°Žå‘"
+msgstr "è¦æ±‚失敗,éŽå¤šé‡æ–°å°Žå‘"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Redirect loop."
@@ -4893,7 +4906,7 @@ msgstr "é‡æ–°å°Žå‘循環。"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, timeout"
-msgstr "請求失敗,逾時"
+msgstr "è¦æ±‚失敗,逾時"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Timeout."
@@ -4933,7 +4946,7 @@ msgstr "正在解æž..."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Error making request"
-msgstr "建立請求時發生錯誤"
+msgstr "建立è¦æ±‚時發生錯誤"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Idle"
@@ -5001,7 +5014,7 @@ msgstr "全部"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr "無「%sã€ç›¸é—œçš„çµæžœã€‚"
+msgstr "找ä¸åˆ°èˆ‡ã€Œ%sã€ç›¸é—œçš„çµæžœã€‚"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Import..."
@@ -5051,15 +5064,15 @@ msgid ""
"path from the BakedLightmap properties."
msgstr ""
"無法判斷光照圖的ä¿å­˜è·¯å¾‘。\n"
-"請將場景ä¿å­˜ï¼ˆåœ–片將ä¿å­˜æ–¼ç›¸åŒè³‡æ–™å¤¾ï¼‰ï¼Œæˆ–是在 BackedLightmap 屬性內é¸æ“‡ä¸€å€‹"
-"ä¿å­˜è·¯å¾‘。"
+"è«‹ä¿å­˜å ´æ™¯ï¼ˆåœ–片將ä¿å­˜æ–¼ç›¸åŒè³‡æ–™å¤¾ï¼‰ï¼Œæˆ–是在 BackedLightmap 屬性內é¸æ“‡ä¸€å€‹ä¿"
+"存路徑。"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Bake "
"Light' flag is on."
msgstr ""
-"ç„¡å¯è£½ä½œä¹‹ç¶²æ ¼ã€‚請確ä¿é€™äº›ç¶²æ ¼åŒ…å« UV2 通é“並已開啟「Bake Lightã€æ——標。"
+"ç„¡å¯çƒ˜ç„™ä¹‹ç¶²æ ¼ã€‚請確ä¿é€™äº›ç¶²æ ¼åŒ…å« UV2 通é“並已開啟「Bake Lightã€æ——標。"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5067,7 +5080,7 @@ msgstr "建立光照圖失敗,請確ä¿è©²è·¯å¾‘å¯å¯«å…¥ã€‚"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Bake Lightmaps"
-msgstr "建立光照圖"
+msgstr "烘焙光照圖"
#: editor/plugins/camera_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5136,50 +5149,43 @@ msgstr "建立水平與垂直åƒè€ƒç·š"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr ""
+msgstr "å°‡ CanvasItem「%sã€çš„ Pivot Offset 設為 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate %d CanvasItems"
-msgstr "旋轉 CanvasItem"
+msgstr "旋轉 %d 個 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "旋轉 CanvasItem"
+msgstr "旋轉 CanvasItem「%dã€ç‚º %d 度"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "移動 CanvasItem"
+msgstr "移動 CanvasItem「%sã€çš„錨點"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr ""
+msgstr "縮放 Node2D「%sã€ç‚º (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr ""
+msgstr "縮放 Control「%sã€ç‚º (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale %d CanvasItems"
-msgstr "縮放 CanvasItem"
+msgstr "縮放 %d 個 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "縮放 CanvasItem"
+msgstr "縮放 CanvasItem「%sã€ç‚º (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move %d CanvasItems"
-msgstr "移動 CanvasItem"
+msgstr "移動 %d 個 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "移動 CanvasItem"
+msgstr "移動 CanvasItem「%sã€è‡³ (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5809,7 +5815,7 @@ msgstr "å³éµé»žæ“Šä»¥æ–°å¢žæŽ§åˆ¶é»ž"
#: editor/plugins/gi_probe_editor_plugin.cpp
msgid "Bake GI Probe"
-msgstr "製作 GI 探查"
+msgstr "烘焙 GI 探查"
#: editor/plugins/gradient_editor_plugin.cpp
msgid "Gradient Edited"
@@ -6151,7 +6157,7 @@ msgstr "產生矩形å¯è¦‹æ€§"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
-msgstr "僅å¯å°‡ç‚º ParticlesMaterial 處ç†æ料設定點"
+msgstr "僅å¯è¨­ç‚ºæŒ‡å‘ ProticlesMaterial 處ç†ææ–™"
#: editor/plugins/particles_2d_editor_plugin.cpp
#: editor/plugins/particles_editor_plugin.cpp
@@ -6442,18 +6448,16 @@ msgid "Move Points"
msgstr "移動點"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Command: Rotate"
-msgstr "拖移:旋轉"
+msgstr "Command:旋轉"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
msgstr "Shift:移動全部"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Shift+Command: Scale"
-msgstr "Shift+Ctrl:縮放"
+msgstr "Shift+Command:縮放"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -6498,14 +6502,12 @@ msgid "Radius:"
msgstr "åŠå¾‘:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy Polygon to UV"
-msgstr "建立多邊形與 UV"
+msgstr "將多邊形複製至 UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
-#, fuzzy
msgid "Copy UV to Polygon"
-msgstr "轉æ›ç‚º Polygon2D"
+msgstr "將 UV 複製至多邊形"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Clear UV"
@@ -6911,7 +6913,7 @@ msgstr "跳至函å¼"
#: editor/plugins/script_text_editor.cpp
msgid "Only resources from filesystem can be dropped."
-msgstr "åªå¯æ‹–移來自檔案系統的資æºã€‚"
+msgstr "åªå¯æ‹–放來自檔案系統的資æºã€‚"
#: editor/plugins/script_text_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
@@ -7828,7 +7830,7 @@ msgstr "分隔線:"
#: editor/plugins/texture_region_editor_plugin.cpp
msgid "TextureRegion"
-msgstr "TextureRegion"
+msgstr "ç´‹ç†è²¼åœ–å€åŸŸ"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
@@ -8045,13 +8047,12 @@ msgid "Paint Tile"
msgstr "繪製圖塊"
#: editor/plugins/tile_map_editor_plugin.cpp
-#, fuzzy
msgid ""
"Shift+LMB: Line Draw\n"
"Shift+Command+LMB: Rectangle Paint"
msgstr ""
"Shift+å·¦éµï¼šç›´ç·šç¹ªè£½\n"
-"Shift+Ctrl+å·¦éµï¼šçŸ©å½¢ç¹ªåœ–"
+"Shift+Command+å·¦éµï¼šçŸ©å½¢ç¹ªåœ–"
#: editor/plugins/tile_map_editor_plugin.cpp
msgid ""
@@ -8573,7 +8574,6 @@ msgid "Add Node to Visual Shader"
msgstr "將節點新增至視覺著色器"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Node(s) Moved"
msgstr "已移動節點"
@@ -8595,9 +8595,8 @@ msgid "Visual Shader Input Type Changed"
msgstr "已修改視覺著色器輸入類型"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "UniformRef Name Changed"
-msgstr "設定å‡å‹»å稱"
+msgstr "已更改 UniformRef å稱"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Vertex"
@@ -9288,7 +9287,7 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "A reference to an existing uniform."
-msgstr ""
+msgstr "ç¾æœ‰å‡å‹»çš„åƒç…§ã€‚"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
@@ -9732,7 +9731,7 @@ msgstr ""
msgid ""
"The project settings were created by a newer engine version, whose settings "
"are not compatible with this version."
-msgstr "該專案設定是由新版本的引擎所建立,其設定無法相容於這個版本。"
+msgstr "該專案設定是由新版本的 Godot 所建立,其設定無法相容於這個版本。"
#: editor/project_manager.cpp
msgid ""
@@ -9741,7 +9740,7 @@ msgid ""
"the \"Application\" category."
msgstr ""
"無法執行專案:未定義主場景。\n"
-"請編輯專案並在「應用程å¼ã€åˆ†é¡žä¸­çš„專案設定內設定主場景。"
+"請編輯專案並在 [專案設定] 的「Applicationã€åˆ†é¡žä¸­è¨­å®šä¸»å ´æ™¯ã€‚"
#: editor/project_manager.cpp
msgid ""
@@ -10494,7 +10493,8 @@ msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"啟用「載入為佔ä½ã€å°‡ç¦ç”¨ã€Œå¯ç·¨è¼¯å­ç¯€é»žã€ä¸¦å°Žè‡´å…¶æ‰€æœ‰ç¯€é»žéƒ½è¢«é‚„原為其é è¨­å€¼ã€‚"
+"啟用「Load As Placeholderã€å°‡ç¦ç”¨ã€ŒEditable Childrenã€ä¸¦å°Žè‡´å…¶æ‰€æœ‰ç¯€é»žéƒ½è¢«é‚„"
+"原為其é è¨­å€¼ã€‚"
#: editor/scene_tree_dock.cpp
msgid "Make Local"
@@ -11349,7 +11349,7 @@ msgstr "製作 NavMesh"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
-msgstr "清除導航網格 (Navigation Mesh)。"
+msgstr "清除導航網格。"
#: modules/recast/navigation_mesh_generator.cpp
msgid "Setting up Configuration..."
@@ -11385,15 +11385,15 @@ msgstr "正在建立輪廓..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Creating polymesh..."
-msgstr "正在建立多邊形網格 (Polymesh)..."
+msgstr "正在建立多邊形網格..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Converting to native navigation mesh..."
-msgstr "正在轉æ›ç‚ºåŽŸç”Ÿå°Žèˆªç¶²æ ¼ (Native Navigation Mesh)..."
+msgstr "正在轉æ›ç‚ºåŽŸç”Ÿå°Žèˆªç¶²æ ¼..."
#: modules/recast/navigation_mesh_generator.cpp
msgid "Navigation Mesh Generator Setup:"
-msgstr "導航網格 (Navigation Mesh) 產生器設定:"
+msgstr "導航網格產生器設定:"
#: modules/recast/navigation_mesh_generator.cpp
msgid "Parsing Geometry..."
@@ -11768,11 +11768,11 @@ msgstr "無效的索引屬性å稱「%sã€ï¼Œæ–¼ç¯€é»žã€Œ%sã€ã€‚"
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ": 無效的引數型別: "
+msgstr ": 無效的引數型別: "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ": 無效的引數: "
+msgstr ": 無效的引數: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -11857,6 +11857,14 @@ msgid "Invalid Android SDK path for custom build in Editor Settings."
msgstr "編輯器設定中用於自定義設定之 Android SDK 路徑無效。"
#: platform/android/export/export.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export.cpp
msgid ""
"Android build template not installed in the project. Install it from the "
"Project menu."
@@ -11906,21 +11914,37 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr "「Export AABã€åƒ…於「Use Custom Buildã€å•Ÿç”¨æ™‚å¯ç”¨ã€‚"
+
+#: platform/android/export/export.cpp
+msgid "Unable to find the zipalign tool."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgid "Aligning APK..."
msgstr ""
#: platform/android/export/export.cpp
-msgid "APK Expansion not compatible with Android App Bundle."
+msgid "Unable to complete APK alignment."
msgstr ""
#: platform/android/export/export.cpp
-msgid "Invalid filename! Android APK requires the *.apk extension."
+msgid "Unable to delete unaligned APK."
msgstr ""
#: platform/android/export/export.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr "無效的檔案å稱ï¼Android App Bundle å¿…é ˆè¦æœ‰ *.aab 副檔å。"
+
+#: platform/android/export/export.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr "APK Expansion 與 Android App Bundle ä¸ç›¸å®¹ã€‚"
+
+#: platform/android/export/export.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr "無效的檔案å稱ï¼Android APK å¿…é ˆè¦æœ‰ *.apk 副檔å。"
+
+#: platform/android/export/export.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
@@ -11953,13 +11977,13 @@ msgstr ""
#: platform/android/export/export.cpp
msgid "Moving output"
-msgstr ""
+msgstr "移動輸出"
#: platform/android/export/export.cpp
msgid ""
"Unable to copy and rename export file, check gradle project directory for "
"outputs."
-msgstr ""
+msgstr "無法複製並更å匯出的檔案,請於 Gradle 專案資料夾內確èªè¼¸å‡ºã€‚"
#: platform/iphone/export/export.cpp
msgid "Identifier is missing."
@@ -12101,7 +12125,7 @@ msgid ""
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
"CollisionPolygon2D 僅å¯ç‚º CollisionObject2D è¡ç”Ÿçš„節點æ供碰撞形狀資訊。請僅"
-"æ–¼ Area2Dã€StaticBody2Dã€RigidBody2Dã€KinematicBody2D…等節點下作為å­ç¯€é»žä½¿"
+"æ–¼ Area2D, StaticBody2D, RigidBody2D, KinematicBody2D…等節點下作為å­ç¯€é»žä½¿"
"用。"
#: scene/2d/collision_polygon_2d.cpp
@@ -12115,7 +12139,7 @@ msgid ""
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
"CollisionShape2D 僅å¯ç‚º CollisionObject2D è¡ç”Ÿçš„節點æ供碰撞形狀資訊。請僅於 "
-"Area2Dã€StaticBody2Dã€RigidBody2Dã€KinematicBody2D…等節點下作為å­ç¯€é»žä½¿ç”¨ä»¥æ"
+"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D…等節點下作為å­ç¯€é»žä½¿ç”¨ä»¥æ"
"供形狀。"
#: scene/2d/collision_shape_2d.cpp
@@ -12144,7 +12168,7 @@ msgstr ""
msgid ""
"A texture with the shape of the light must be supplied to the \"Texture\" "
"property."
-msgstr "有光照形狀的紋ç†å¿…é ˆæ供「紋ç†ã€å±¬æ€§ã€‚"
+msgstr "有光照形狀的紋ç†å¿…é ˆæ供「Textureã€ï¼ˆç´‹ç†ï¼‰å±¬æ€§ã€‚"
#: scene/2d/light_occluder_2d.cpp
msgid ""
@@ -12236,9 +12260,8 @@ msgid ""
"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
"KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D 僅å¯ç‚º CollisionObject2D è¡ç”Ÿçš„節點æ供碰撞形狀資訊。請將其"
-"設為 Area2Dã€StaticBody2Dã€RigidBody2Dã€KinematicBody2D… çš„å­ç¯€é»žä»¥è³¦äºˆå…¶å½¢"
-"狀。"
+"打開「Use Parentã€çš„ TileMap 僅å¯ç‚ºæ¯ç´š CollisionObject2D æ供形狀。請將其設"
+"為 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D… çš„å­ç¯€é»žä»¥è³¦äºˆå…¶å½¢ç‹€ã€‚"
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -12367,7 +12390,7 @@ msgid ""
"GIProbes are not supported by the GLES2 video driver.\n"
"Use a BakedLightmap instead."
msgstr ""
-"GLES2 視訊驅動程å¼ä¸æ”¯æ´ GIProbs。\n"
+"GLES2 視訊驅動程å¼ä¸æ”¯æ´ GIProbes。\n"
"請改為使用 BakedLightmap。"
#: scene/3d/interpolated_camera.cpp
@@ -12619,7 +12642,9 @@ msgstr "(其它)"
msgid ""
"Default Environment as specified in Project Settings (Rendering -> "
"Environment -> Default Environment) could not be loaded."
-msgstr "無法載入專案設定中指定的é è¨­ç’°å¢ƒï¼ˆç®—繪 -> 環境 -> é è¨­ç’°å¢ƒï¼‰ã€‚"
+msgstr ""
+"無法載入專案設定中指定的é è¨­ç’°å¢ƒ (Rendering -> Environment -> Default "
+"Environment)。"
#: scene/main/viewport.cpp
msgid ""
@@ -12664,6 +12689,12 @@ msgstr "Varying 變數åªå¯åœ¨é ‚點函å¼ä¸­æŒ‡æ´¾ã€‚"
msgid "Constants cannot be modified."
msgstr "ä¸å¯ä¿®æ”¹å¸¸æ•¸ã€‚"
+#~ msgid "Error trying to save layout!"
+#~ msgstr "嘗試ä¿å­˜é…置時出錯ï¼"
+
+#~ msgid "Default editor layout overridden."
+#~ msgstr "已覆蓋é è¨­çš„編輯器é…置。"
+
#~ msgid "Move pivot"
#~ msgstr "移動軸心"
diff --git a/main/main.cpp b/main/main.cpp
index 3905366598..82be327cbb 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -334,8 +334,8 @@ void Main::print_help(const char *p_binary) {
OS::get_singleton()->print(" -d, --debug Debug (local stdout debugger).\n");
OS::get_singleton()->print(" -b, --breakpoints Breakpoint list as source::line comma-separated pairs, no spaces (use %%20 instead).\n");
OS::get_singleton()->print(" --profiling Enable profiling in the script debugger.\n");
-#if DEBUG_ENABLED
OS::get_singleton()->print(" --vk-layers Enable Vulkan Validation layers for debugging.\n");
+#if DEBUG_ENABLED
OS::get_singleton()->print(" --gpu-abort Abort on GPU errors (usually validation layer errors), may help see the problem if your system freezes.\n");
#endif
OS::get_singleton()->print(" --remote-debug <uri> Remote debug (<protocol>://<host/IP>[:<port>], e.g. tcp://127.0.0.1:6007).\n");
@@ -698,9 +698,9 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
} else if (I->get() == "-w" || I->get() == "--windowed") { // force windowed window
init_windowed = true;
-#ifdef DEBUG_ENABLED
} else if (I->get() == "--vk-layers") {
Engine::singleton->use_validation_layers = true;
+#ifdef DEBUG_ENABLED
} else if (I->get() == "--gpu-abort") {
Engine::singleton->abort_on_gpu_errors = true;
#endif
@@ -1143,7 +1143,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
use_custom_res = false;
input_map->load_default(); //keys for editor
} else {
- input_map->load_from_globals(); //keys for game
+ input_map->load_from_project_settings(); //keys for game
}
if (bool(ProjectSettings::get_singleton()->get("application/run/disable_stdout"))) {
@@ -1890,14 +1890,6 @@ bool Main::start() {
return false;
}
- if (_export_preset != "") {
- if (positional_arg == "") {
- String err = "Command line includes export parameter option, but no destination path was given.\n";
- err += "Please specify the binary's file path to export to. Aborting export.";
- ERR_PRINT(err);
- return false;
- }
- }
#endif
if (script == "" && game_path == "" && String(GLOBAL_DEF("application/run/main_scene", "")) != "") {
@@ -2396,7 +2388,6 @@ bool Main::iteration() {
for (int iters = 0; iters < advance.physics_steps; ++iters) {
uint64_t physics_begin = OS::get_singleton()->get_ticks_usec();
- PhysicsServer3D::get_singleton()->sync();
PhysicsServer3D::get_singleton()->flush_queries();
PhysicsServer2D::get_singleton()->sync();
diff --git a/main/performance.cpp b/main/performance.cpp
index 3d7971ced3..9de269ba5f 100644
--- a/main/performance.cpp
+++ b/main/performance.cpp
@@ -93,7 +93,6 @@ float Performance::_get_node_count() const {
String Performance::get_monitor_name(Monitor p_monitor) const {
ERR_FAIL_INDEX_V(p_monitor, MONITOR_MAX, String());
static const char *names[MONITOR_MAX] = {
-
"time/fps",
"time/process",
"time/physics_process",
@@ -195,7 +194,6 @@ Performance::MonitorType Performance::get_monitor_type(Monitor p_monitor) const
ERR_FAIL_INDEX_V(p_monitor, MONITOR_MAX, MONITOR_TYPE_QUANTITY);
// ugly
static const MonitorType types[MONITOR_MAX] = {
-
MONITOR_TYPE_QUANTITY,
MONITOR_TYPE_TIME,
MONITOR_TYPE_TIME,
diff --git a/main/performance.h b/main/performance.h
index 415b49b58c..40f1d5cb05 100644
--- a/main/performance.h
+++ b/main/performance.h
@@ -63,7 +63,6 @@ class Performance : public Object {
public:
enum Monitor {
-
TIME_FPS,
TIME_PROCESS,
TIME_PHYSICS_PROCESS,
diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html
index 5b6ad2df65..d4234d08ac 100644
--- a/misc/dist/html/editor.html
+++ b/misc/dist/html/editor.html
@@ -258,7 +258,6 @@
}
function startEditor(zip) {
-
const INDETERMINATE_STATUS_STEP_MS = 100;
const persistentPaths = ['/home/web_user/.config', '/home/web_user/projects'];
@@ -296,7 +295,6 @@
adjustCanvasDimensions();
setStatusMode = function setStatusMode(mode) {
-
if (statusMode === mode || !initializing)
return;
[statusProgress, statusIndeterminate, statusNotice].forEach(elem => {
@@ -322,10 +320,9 @@
throw new Error('Invalid status mode');
}
statusMode = mode;
- }
+ };
function animateStatusIndeterminate(ms) {
-
var i = Math.floor(ms / INDETERMINATE_STATUS_STEP_MS % 8);
if (statusIndeterminate.children[i].style.borderTopColor == '') {
Array.prototype.slice.call(statusIndeterminate.children).forEach(child => {
@@ -336,7 +333,6 @@
}
setStatusNotice = function setStatusNotice(text) {
-
while (statusNotice.lastChild) {
statusNotice.removeChild(statusNotice.lastChild);
}
@@ -348,7 +344,6 @@
};
engine.setProgressFunc((current, total) => {
-
if (total > 0) {
statusProgressInner.style.width = current/total * 100 + '%';
setStatusMode('progress');
diff --git a/misc/dist/html/fixed-size.html b/misc/dist/html/fixed-size.html
index 85064b34fd..9d0a946497 100644
--- a/misc/dist/html/fixed-size.html
+++ b/misc/dist/html/fixed-size.html
@@ -229,7 +229,6 @@ $GODOT_HEAD_INCLUDE
var engine = new Engine;
(function() {
-
const EXECUTABLE_NAME = '$GODOT_BASENAME';
const MAIN_PACK = '$GODOT_BASENAME.pck';
const EXTRA_ARGS = JSON.parse('$GODOT_ARGS');
@@ -247,7 +246,6 @@ $GODOT_HEAD_INCLUDE
var indeterminiateStatusAnimationId = 0;
function setStatusMode(mode) {
-
if (statusMode === mode || !initializing)
return;
[statusProgress, statusIndeterminate, statusNotice].forEach(elem => {
@@ -288,7 +286,6 @@ $GODOT_HEAD_INCLUDE
}
function setStatusNotice(text) {
-
while (statusNotice.lastChild) {
statusNotice.removeChild(statusNotice.lastChild);
}
@@ -300,7 +297,6 @@ $GODOT_HEAD_INCLUDE
};
engine.setProgressFunc((current, total) => {
-
if (total > 0) {
statusProgressInner.style.width = current/total * 100 + '%';
setStatusMode('progress');
diff --git a/misc/dist/html/full-size.html b/misc/dist/html/full-size.html
index 58cf8ba4d8..7d29b35f61 100644
--- a/misc/dist/html/full-size.html
+++ b/misc/dist/html/full-size.html
@@ -142,7 +142,6 @@ $GODOT_HEAD_INCLUDE
var setStatusNotice;
(function() {
-
const EXECUTABLE_NAME = '$GODOT_BASENAME';
const MAIN_PACK = '$GODOT_BASENAME.pck';
const EXTRA_ARGS = JSON.parse('$GODOT_ARGS');
@@ -188,7 +187,6 @@ $GODOT_HEAD_INCLUDE
}
setStatusMode = function setStatusMode(mode) {
-
if (statusMode === mode || !initializing)
return;
[statusProgress, statusIndeterminate, statusNotice].forEach(elem => {
@@ -217,7 +215,6 @@ $GODOT_HEAD_INCLUDE
};
function animateStatusIndeterminate(ms) {
-
var i = Math.floor(ms / INDETERMINATE_STATUS_STEP_MS % 8);
if (statusIndeterminate.children[i].style.borderTopColor == '') {
Array.prototype.slice.call(statusIndeterminate.children).forEach(child => {
@@ -228,7 +225,6 @@ $GODOT_HEAD_INCLUDE
}
setStatusNotice = function setStatusNotice(text) {
-
while (statusNotice.lastChild) {
statusNotice.removeChild(statusNotice.lastChild);
}
@@ -240,7 +236,6 @@ $GODOT_HEAD_INCLUDE
};
engine.setProgressFunc((current, total) => {
-
if (total > 0) {
statusProgressInner.style.width = current/total * 100 + '%';
setStatusMode('progress');
diff --git a/misc/dist/windows/.gitignore b/misc/dist/windows/.gitignore
new file mode 100644
index 0000000000..b615268279
--- /dev/null
+++ b/misc/dist/windows/.gitignore
@@ -0,0 +1,2 @@
+# Ignore both the Godot executable and generated installers.
+*.exe
diff --git a/misc/dist/windows/README.md b/misc/dist/windows/README.md
new file mode 100644
index 0000000000..6df66437a7
--- /dev/null
+++ b/misc/dist/windows/README.md
@@ -0,0 +1,17 @@
+# Windows installer
+
+`godot.iss` is an [Inno Setup](https://jrsoftware.org/isinfo.php) installer file
+that can be used to build a Windows installer. The generated installer is able
+to run without Administrator privileges and can optionally add Godot to the
+user's `PATH` environment variable.
+
+To use Inno Setup on Linux, use [innoextract](https://constexpr.org/innoextract/)
+to extract the Inno Setup installer then run `ISCC.exe` using
+[WINE](https://www.winehq.org/).
+
+## Building
+
+- Place a Godot editor executable in this folder and rename it to `godot.exe`.
+- Run the Inno Setup Compiler (part of the Inno Setup suite) on the `godot.iss` file.
+
+If everything succeeds, an installer will be generated in this folder.
diff --git a/misc/dist/windows/godot.iss b/misc/dist/windows/godot.iss
new file mode 100644
index 0000000000..f7aa8249bc
--- /dev/null
+++ b/misc/dist/windows/godot.iss
@@ -0,0 +1,63 @@
+#define MyAppName "Godot Engine"
+#define MyAppVersion "4.0.dev"
+#define MyAppPublisher "Godot Engine contributors"
+#define MyAppURL "https://godotengine.org/"
+#define MyAppExeName "godot.exe"
+
+[Setup]
+AppId={{60D07AAA-400E-40F5-B073-A796C34D9D78}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+; Don't add "version {version}" to the installed app name in the Add/Remove Programs
+; dialog as it's redundant with the Version field in that same dialog.
+AppVerName={#MyAppName}
+AppPublisher={#MyAppPublisher}
+AppPublisherURL={#MyAppURL}
+AppSupportURL={#MyAppURL}
+AppUpdatesURL={#MyAppURL}
+AppComments=Godot Engine editor
+ChangesEnvironment=yes
+DefaultDirName={localappdata}\Godot
+DefaultGroupName=Godot Engine
+AllowNoIcons=yes
+UninstallDisplayIcon={app}\{#MyAppExeName}
+#ifdef App32Bit
+ OutputBaseFilename=godot-setup-x86
+#else
+ OutputBaseFilename=godot-setup-x86_64
+ ArchitecturesAllowed=x64
+ ArchitecturesInstallIn64BitMode=x64
+#endif
+Compression=lzma
+SolidCompression=yes
+PrivilegesRequired=lowest
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+
+[Tasks]
+Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
+Name: "modifypath"; Description: "Add Godot to PATH environment variable"
+
+[Files]
+Source: "{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
+
+[Icons]
+Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
+Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
+
+[Run]
+Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
+
+[Code]
+const
+ ModPathName = 'modifypath';
+ ModPathType = 'user';
+
+function ModPathDir(): TArrayOfString;
+begin
+ setArrayLength(Result, 1)
+ Result[0] := ExpandConstant('{app}');
+end;
+
+#include "modpath.pas"
diff --git a/misc/dist/windows/modpath.pas b/misc/dist/windows/modpath.pas
new file mode 100644
index 0000000000..c55ec60163
--- /dev/null
+++ b/misc/dist/windows/modpath.pas
@@ -0,0 +1,219 @@
+// ----------------------------------------------------------------------------
+//
+// Inno Setup Ver: 5.4.2
+// Script Version: 1.4.2
+// Author: Jared Breland <jbreland@legroom.net>
+// Homepage: http://www.legroom.net/software
+// License: GNU Lesser General Public License (LGPL), version 3
+// http://www.gnu.org/licenses/lgpl.html
+//
+// Script Function:
+// Allow modification of environmental path directly from Inno Setup installers
+//
+// Instructions:
+// Copy modpath.iss to the same directory as your setup script
+//
+// Add this statement to your [Setup] section
+// ChangesEnvironment=true
+//
+// Add this statement to your [Tasks] section
+// You can change the Description or Flags
+// You can change the Name, but it must match the ModPathName setting below
+// Name: modifypath; Description: &Add application directory to your environmental path; Flags: unchecked
+//
+// Add the following to the end of your [Code] section
+// ModPathName defines the name of the task defined above
+// ModPathType defines whether the 'user' or 'system' path will be modified;
+// this will default to user if anything other than system is set
+// setArrayLength must specify the total number of dirs to be added
+// Result[0] contains first directory, Result[1] contains second, etc.
+// const
+// ModPathName = 'modifypath';
+// ModPathType = 'user';
+//
+// function ModPathDir(): TArrayOfString;
+// begin
+// setArrayLength(Result, 1);
+// Result[0] := ExpandConstant('{app}');
+// end;
+// #include "modpath.iss"
+// ----------------------------------------------------------------------------
+
+procedure ModPath();
+var
+ oldpath: String;
+ newpath: String;
+ updatepath: Boolean;
+ pathArr: TArrayOfString;
+ aExecFile: String;
+ aExecArr: TArrayOfString;
+ i, d: Integer;
+ pathdir: TArrayOfString;
+ regroot: Integer;
+ regpath: String;
+
+begin
+ // Get constants from main script and adjust behavior accordingly
+ // ModPathType MUST be 'system' or 'user'; force 'user' if invalid
+ if ModPathType = 'system' then begin
+ regroot := HKEY_LOCAL_MACHINE;
+ regpath := 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
+ end else begin
+ regroot := HKEY_CURRENT_USER;
+ regpath := 'Environment';
+ end;
+
+ // Get array of new directories and act on each individually
+ pathdir := ModPathDir();
+ for d := 0 to GetArrayLength(pathdir)-1 do begin
+ updatepath := true;
+
+ // Modify WinNT path
+ if UsingWinNT() = true then begin
+
+ // Get current path, split into an array
+ RegQueryStringValue(regroot, regpath, 'Path', oldpath);
+ oldpath := oldpath + ';';
+ i := 0;
+
+ while (Pos(';', oldpath) > 0) do begin
+ SetArrayLength(pathArr, i+1);
+ pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1);
+ oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath));
+ i := i + 1;
+
+ // Check if current directory matches app dir
+ if pathdir[d] = pathArr[i-1] then begin
+ // if uninstalling, remove dir from path
+ if IsUninstaller() = true then begin
+ continue;
+ // if installing, flag that dir already exists in path
+ end else begin
+ updatepath := false;
+ end;
+ end;
+
+ // Add current directory to new path
+ if i = 1 then begin
+ newpath := pathArr[i-1];
+ end else begin
+ newpath := newpath + ';' + pathArr[i-1];
+ end;
+ end;
+
+ // Append app dir to path if not already included
+ if (IsUninstaller() = false) AND (updatepath = true) then
+ newpath := newpath + ';' + pathdir[d];
+
+ // Write new path
+ RegWriteStringValue(regroot, regpath, 'Path', newpath);
+
+ // Modify Win9x path
+ end else begin
+
+ // Convert to shortened dirname
+ pathdir[d] := GetShortName(pathdir[d]);
+
+ // If autoexec.bat exists, check if app dir already exists in path
+ aExecFile := 'C:\AUTOEXEC.BAT';
+ if FileExists(aExecFile) then begin
+ LoadStringsFromFile(aExecFile, aExecArr);
+ for i := 0 to GetArrayLength(aExecArr)-1 do begin
+ if IsUninstaller() = false then begin
+ // If app dir already exists while installing, skip add
+ if (Pos(pathdir[d], aExecArr[i]) > 0) then
+ updatepath := false;
+ break;
+ end else begin
+ // If app dir exists and = what we originally set, then delete at uninstall
+ if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then
+ aExecArr[i] := '';
+ end;
+ end;
+ end;
+
+ // If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path
+ if (IsUninstaller() = false) AND (updatepath = true) then begin
+ SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True);
+
+ // If uninstalling, write the full autoexec out
+ end else begin
+ SaveStringsToFile(aExecFile, aExecArr, False);
+ end;
+ end;
+ end;
+end;
+
+// Split a string into an array using passed delimeter
+procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String);
+var
+ i: Integer;
+begin
+ i := 0;
+ repeat
+ SetArrayLength(Dest, i+1);
+ if Pos(Separator,Text) > 0 then begin
+ Dest[i] := Copy(Text, 1, Pos(Separator, Text)-1);
+ Text := Copy(Text, Pos(Separator,Text) + Length(Separator), Length(Text));
+ i := i + 1;
+ end else begin
+ Dest[i] := Text;
+ Text := '';
+ end;
+ until Length(Text)=0;
+end;
+
+
+procedure CurStepChanged(CurStep: TSetupStep);
+var
+ taskname: String;
+begin
+ taskname := ModPathName;
+ if CurStep = ssPostInstall then
+ if IsTaskSelected(taskname) then
+ ModPath();
+end;
+
+procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
+var
+ aSelectedTasks: TArrayOfString;
+ i: Integer;
+ taskname: String;
+ regpath: String;
+ regstring: String;
+ appid: String;
+begin
+ // only run during actual uninstall
+ if CurUninstallStep = usUninstall then begin
+ // get list of selected tasks saved in registry at install time
+ appid := '{#emit SetupSetting("AppId")}';
+ if appid = '' then appid := '{#emit SetupSetting("AppName")}';
+ regpath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+appid+'_is1');
+ RegQueryStringValue(HKLM, regpath, 'Inno Setup: Selected Tasks', regstring);
+ if regstring = '' then RegQueryStringValue(HKCU, regpath, 'Inno Setup: Selected Tasks', regstring);
+
+ // check each task; if matches modpath taskname, trigger patch removal
+ if regstring <> '' then begin
+ taskname := ModPathName;
+ MPExplode(aSelectedTasks, regstring, ',');
+ if GetArrayLength(aSelectedTasks) > 0 then begin
+ for i := 0 to GetArrayLength(aSelectedTasks)-1 do begin
+ if comparetext(aSelectedTasks[i], taskname) = 0 then
+ ModPath();
+ end;
+ end;
+ end;
+ end;
+end;
+
+function NeedRestart(): Boolean;
+var
+ taskname: String;
+begin
+ taskname := ModPathName;
+ if IsTaskSelected(taskname) and not UsingWinNT() then begin
+ Result := True;
+ end else begin
+ Result := False;
+ end;
+end;
diff --git a/misc/scripts/file_format.sh b/misc/scripts/file_format.sh
index c570ec23a7..0e9db68a90 100755
--- a/misc/scripts/file_format.sh
+++ b/misc/scripts/file_format.sh
@@ -40,6 +40,13 @@ while IFS= read -rd '' f; do
perl -i -ple 's/\s*$//g' "$f"
# Remove the character sequence "== true" if it has a leading space.
perl -i -pe 's/\x20== true//g' "$f"
+
+ if [[ $(uname) == "Linux" ]] && [[ "$f" != *"xml" ]]; then
+ # Remove empty lines after the opening brace of indented blocks.
+ sed -z -i 's/\x7B\x0A\x0A\x09/\x7B\x0A\x09/g' "$f"
+ # Remove empty lines before the closing brace (in some cases).
+ sed -z -i 's/\x0A\x0A\x7D/\x0A\x7D/g' "$f"
+ fi
done
git diff > patch.patch
diff --git a/modules/basis_universal/texture_basisu.cpp b/modules/basis_universal/texture_basisu.cpp
index 2ed0340927..5831d3de2a 100644
--- a/modules/basis_universal/texture_basisu.cpp
+++ b/modules/basis_universal/texture_basisu.cpp
@@ -39,44 +39,36 @@
#include <transcoder/basisu_transcoder.h>
void TextureBasisU::_bind_methods() {
-
ClassDB::bind_method(D_METHOD("set_basisu_data", "data"), &TextureBasisU::set_basisu_data);
ClassDB::bind_method(D_METHOD("get_basisu_data"), &TextureBasisU::get_data);
ClassDB::bind_method(D_METHOD("import"), &TextureBasisU::import);
ADD_PROPERTY(PropertyInfo(Variant::PACKED_BYTE_ARRAY, "basisu_data"), "set_basisu_data", "get_basisu_data");
-
};
int TextureBasisU::get_width() const {
-
return tex_size.x;
};
int TextureBasisU::get_height() const {
-
return tex_size.y;
};
RID TextureBasisU::get_rid() const {
-
return texture;
};
bool TextureBasisU::has_alpha() const {
-
return false;
};
void TextureBasisU::set_flags(uint32_t p_flags) {
-
flags = p_flags;
RenderingServer::get_singleton()->texture_set_flags(texture, p_flags);
};
uint32_t TextureBasisU::get_flags() const {
-
return flags;
};
@@ -95,12 +87,10 @@ void TextureBasisU::set_basisu_data(const Vector<uint8_t>& p_data) {
Image::Format imgfmt;
if (OS::get_singleton()->has_feature("s3tc")) {
-
format = basist::cTFBC3; // get this from renderer
imgfmt = Image::FORMAT_DXT5;
} else if (OS::get_singleton()->has_feature("etc2")) {
-
format = basist::cTFETC2;
imgfmt = Image::FORMAT_ETC2_RGBA8;
};
@@ -126,7 +116,6 @@ void TextureBasisU::set_basisu_data(const Vector<uint8_t>& p_data) {
int ofs = 0;
tr.start_transcoding(ptr, size);
for (int i=0; i<info.m_total_levels; i++) {
-
basist::basisu_image_level_info level;
tr.get_image_level_info(ptr, size, level, 0, i);
@@ -214,19 +203,16 @@ Error TextureBasisU::import(const Ref<Image>& p_img) {
Vector<uint8_t> TextureBasisU::get_basisu_data() const {
-
return data;
};
TextureBasisU::TextureBasisU() {
-
flags = FLAGS_DEFAULT;
texture = RenderingServer::get_singleton()->texture_create();
};
TextureBasisU::~TextureBasisU() {
-
RenderingServer::get_singleton()->free(texture);
};
diff --git a/modules/basis_universal/texture_basisu.h b/modules/basis_universal/texture_basisu.h
index 20ecf15a59..99248f9162 100644
--- a/modules/basis_universal/texture_basisu.h
+++ b/modules/basis_universal/texture_basisu.h
@@ -41,7 +41,6 @@
#if 0
class TextureBasisU : public Texture {
-
GDCLASS(TextureBasisU, Texture);
RES_BASE_EXTENSION("butex");
@@ -74,7 +73,6 @@ public:
TextureBasisU();
~TextureBasisU();
-
};
#endif
diff --git a/modules/bullet/bullet_physics_server.cpp b/modules/bullet/bullet_physics_server.cpp
index f7290666ad..663ad6e3e1 100644
--- a/modules/bullet/bullet_physics_server.cpp
+++ b/modules/bullet/bullet_physics_server.cpp
@@ -1553,9 +1553,6 @@ void BulletPhysicsServer3D::step(float p_deltaTime) {
}
}
-void BulletPhysicsServer3D::sync() {
-}
-
void BulletPhysicsServer3D::flush_queries() {
if (!active) {
return;
diff --git a/modules/bullet/bullet_physics_server.h b/modules/bullet/bullet_physics_server.h
index 02ba5458d8..dca9339c44 100644
--- a/modules/bullet/bullet_physics_server.h
+++ b/modules/bullet/bullet_physics_server.h
@@ -397,7 +397,6 @@ public:
virtual void init() override;
virtual void step(float p_deltaTime) override;
- virtual void sync() override;
virtual void flush_queries() override;
virtual void finish() override;
diff --git a/modules/dds/texture_loader_dds.cpp b/modules/dds/texture_loader_dds.cpp
index 2f4f7d7a4c..627153fbc8 100644
--- a/modules/dds/texture_loader_dds.cpp
+++ b/modules/dds/texture_loader_dds.cpp
@@ -373,7 +373,6 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path,
int colcount = size/4;
for(int i=0;i<colcount;i++) {
-
uint8_t r = wb[i*4+1];
uint8_t g = wb[i*4+2];
uint8_t b = wb[i*4+3];
@@ -392,7 +391,6 @@ RES ResourceFormatDDS::load(const String &p_path, const String &p_original_path,
int colcount = size/3;
for(int i=0;i<colcount;i++) {
-
SWAP( wb[i*3+0],wb[i*3+2] );
}*/
} break;
diff --git a/modules/etc/image_etc.cpp b/modules/etc/image_etc.cpp
index 6cac2458f9..4e9e64c6a7 100644
--- a/modules/etc/image_etc.cpp
+++ b/modules/etc/image_etc.cpp
@@ -106,7 +106,6 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f
// If VRAM compression is using ETC, but image has alpha, convert to RGBA4444 or LA8
// This saves space while maintaining the alpha channel
if (detected_channels == Image::USED_CHANNELS_RGBA) {
-
if (p_img->has_mipmaps()) {
// Image doesn't support mipmaps with RGBA4444 textures
p_img->clear_mipmaps();
@@ -114,7 +113,6 @@ static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_f
p_img->convert(Image::FORMAT_RGBA4444);
return;
} else if (detected_channels == Image::USE_CHANNELS_LA) {
-
p_img->convert(Image::FORMAT_LA8);
return;
}
diff --git a/modules/gdnative/include/nativescript/godot_nativescript.h b/modules/gdnative/include/nativescript/godot_nativescript.h
index 825033c99c..cc12d58037 100644
--- a/modules/gdnative/include/nativescript/godot_nativescript.h
+++ b/modules/gdnative/include/nativescript/godot_nativescript.h
@@ -85,7 +85,6 @@ typedef enum {
} godot_nativescript_property_hint;
typedef enum {
-
GODOT_PROPERTY_USAGE_STORAGE = 1,
GODOT_PROPERTY_USAGE_EDITOR = 2,
GODOT_PROPERTY_USAGE_NETWORK = 4,
diff --git a/modules/gdnative/tests/test_string.h b/modules/gdnative/tests/test_string.h
index aeb855a1c4..2b1aa5bf28 100644
--- a/modules/gdnative/tests/test_string.h
+++ b/modules/gdnative/tests/test_string.h
@@ -1974,7 +1974,6 @@ TEST_CASE("[GDNative String] humanize_size") {
CHECK(u32scmp(godot_string_get_data(&s), U"4.97 GiB") == 0);
godot_string_destroy(&s);
}
-
} // namespace TestGDNativeString
#endif // TEST_GDNATIVE_STRING_H
diff --git a/modules/gdscript/language_server/lsp.hpp b/modules/gdscript/language_server/lsp.hpp
index bf32c1c978..288fd41c87 100644
--- a/modules/gdscript/language_server/lsp.hpp
+++ b/modules/gdscript/language_server/lsp.hpp
@@ -1781,7 +1781,6 @@ static String marked_documentation(const String &p_bbcode) {
}
return markdown;
}
-
} // namespace lsp
#endif
diff --git a/modules/gdscript/tests/test_gdscript.cpp b/modules/gdscript/tests/test_gdscript.cpp
index 50b3783388..643c2f10a2 100644
--- a/modules/gdscript/tests/test_gdscript.cpp
+++ b/modules/gdscript/tests/test_gdscript.cpp
@@ -303,5 +303,4 @@ void test(TestType p_type) {
ScriptServer::finish_languages();
memdelete(packed_data);
}
-
} // namespace TestGDScript
diff --git a/modules/gdscript/tests/test_gdscript.h b/modules/gdscript/tests/test_gdscript.h
index 5aa962dcf8..6182629802 100644
--- a/modules/gdscript/tests/test_gdscript.h
+++ b/modules/gdscript/tests/test_gdscript.h
@@ -41,7 +41,6 @@ enum TestType {
};
void test(TestType p_type);
-
} // namespace TestGDScript
#endif // TEST_GDSCRIPT_H
diff --git a/modules/gridmap/grid_map_editor_plugin.h b/modules/gridmap/grid_map_editor_plugin.h
index ee17a52d31..69c8d999fd 100644
--- a/modules/gridmap/grid_map_editor_plugin.h
+++ b/modules/gridmap/grid_map_editor_plugin.h
@@ -41,12 +41,10 @@ class GridMapEditor : public VBoxContainer {
GDCLASS(GridMapEditor, VBoxContainer);
enum {
-
GRID_CURSOR_SIZE = 50
};
enum InputAction {
-
INPUT_NONE,
INPUT_PAINT,
INPUT_ERASE,
@@ -56,7 +54,6 @@ class GridMapEditor : public VBoxContainer {
};
enum ClipMode {
-
CLIP_DISABLED,
CLIP_ABOVE,
CLIP_BELOW
@@ -158,7 +155,6 @@ class GridMapEditor : public VBoxContainer {
int cursor_rot;
enum Menu {
-
MENU_OPTION_NEXT_LEVEL,
MENU_OPTION_PREV_LEVEL,
MENU_OPTION_LOCK_VIEW,
diff --git a/modules/mono/build_scripts/make_android_mono_config.py b/modules/mono/build_scripts/make_android_mono_config.py
index d276d7d886..04f8c80243 100644
--- a/modules/mono/build_scripts/make_android_mono_config.py
+++ b/modules/mono/build_scripts/make_android_mono_config.py
@@ -32,7 +32,6 @@ namespace {
static const int config_compressed_size = %d;
static const int config_uncompressed_size = %d;
static const unsigned char config_compressed_data[] = { %s };
-
} // namespace
String get_godot_android_mono_config() {
diff --git a/modules/mono/editor/code_completion.cpp b/modules/mono/editor/code_completion.cpp
index 9defd65190..f1919c2501 100644
--- a/modules/mono/editor/code_completion.cpp
+++ b/modules/mono/editor/code_completion.cpp
@@ -246,5 +246,4 @@ PackedStringArray get_code_completion(CompletionKind p_kind, const String &p_scr
return suggestions;
}
-
} // namespace gdmono
diff --git a/modules/mono/editor/code_completion.h b/modules/mono/editor/code_completion.h
index b9d22de0b3..c2a33a9133 100644
--- a/modules/mono/editor/code_completion.h
+++ b/modules/mono/editor/code_completion.h
@@ -50,7 +50,6 @@ enum class CompletionKind {
};
PackedStringArray get_code_completion(CompletionKind p_kind, const String &p_script_file);
-
} // namespace gdmono
#endif // CODE_COMPLETION_H
diff --git a/modules/mono/editor/godotsharp_export.cpp b/modules/mono/editor/godotsharp_export.cpp
index 4fa753ab8b..1a0d5743ae 100644
--- a/modules/mono/editor/godotsharp_export.cpp
+++ b/modules/mono/editor/godotsharp_export.cpp
@@ -141,5 +141,4 @@ Error get_exported_assembly_dependencies(const Dictionary &p_initial_assemblies,
return OK;
}
-
} // namespace GodotSharpExport
diff --git a/modules/mono/editor/godotsharp_export.h b/modules/mono/editor/godotsharp_export.h
index bd0f86a74b..586d4e5a0c 100644
--- a/modules/mono/editor/godotsharp_export.h
+++ b/modules/mono/editor/godotsharp_export.h
@@ -43,7 +43,6 @@ Error get_assembly_dependencies(GDMonoAssembly *p_assembly, const Vector<String>
Error get_exported_assembly_dependencies(const Dictionary &p_initial_assemblies,
const String &p_build_config, const String &p_custom_lib_dir, Dictionary &r_assembly_dependencies);
-
} // namespace GodotSharpExport
#endif // GODOTSHARP_EXPORT_H
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
index e42d067a7a..90141928ca 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
@@ -777,31 +777,10 @@ namespace Godot
return ParseCol4(str, ofs) * 16 + ParseCol4(str, ofs + 1);
}
- private String ToHex32(float val)
+ private string ToHex32(float val)
{
- int v = Mathf.RoundToInt(Mathf.Clamp(val * 255, 0, 255));
-
- var ret = string.Empty;
-
- for (int i = 0; i < 2; i++)
- {
- char c;
- int lv = v & 0xF;
-
- if (lv < 10)
- {
- c = (char)('0' + lv);
- }
- else
- {
- c = (char)('a' + lv - 10);
- }
-
- v >>= 4;
- ret = c + ret;
- }
-
- return ret;
+ byte b = (byte)Mathf.RoundToInt(Mathf.Clamp(val * 255, 0, 255));
+ return b.HexEncode();
}
internal static bool HtmlIsValid(string color)
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
index d63db0f905..0700f197ff 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
@@ -322,6 +322,15 @@ namespace Godot
return instance.IndexOf(what, from, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
}
+ /// <summary>Find the first occurrence of a char. Optionally, the search starting position can be passed.</summary>
+ /// <returns>The first instance of the char, or -1 if not found.</returns>
+ public static int Find(this string instance, char what, int from = 0, bool caseSensitive = true)
+ {
+ // TODO: Could be more efficient if we get a char version of `IndexOf`.
+ // See https://github.com/dotnet/runtime/issues/44116
+ return instance.IndexOf(what.ToString(), from, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase);
+ }
+
/// <summary>Find the last occurrence of a substring.</summary>
/// <returns>The starting position of the substring, or -1 if not found.</returns>
public static int FindLast(this string instance, string what, bool caseSensitive = true)
@@ -437,6 +446,53 @@ namespace Godot
return hashv;
}
+ /// <summary>
+ /// Returns a hexadecimal representation of this byte as a string.
+ /// </summary>
+ /// <param name="bytes">The byte to encode.</param>
+ /// <returns>The hexadecimal representation of this byte.</returns>
+ internal static string HexEncode(this byte b)
+ {
+ var ret = string.Empty;
+
+ for (int i = 0; i < 2; i++)
+ {
+ char c;
+ int lv = b & 0xF;
+
+ if (lv < 10)
+ {
+ c = (char)('0' + lv);
+ }
+ else
+ {
+ c = (char)('a' + lv - 10);
+ }
+
+ b >>= 4;
+ ret = c + ret;
+ }
+
+ return ret;
+ }
+
+ /// <summary>
+ /// Returns a hexadecimal representation of this byte array as a string.
+ /// </summary>
+ /// <param name="bytes">The byte array to encode.</param>
+ /// <returns>The hexadecimal representation of this byte array.</returns>
+ public static string HexEncode(this byte[] bytes)
+ {
+ var ret = string.Empty;
+
+ foreach (byte b in bytes)
+ {
+ ret += b.HexEncode();
+ }
+
+ return ret;
+ }
+
// <summary>
// Convert a string containing an hexadecimal number into an int.
// </summary>
@@ -659,6 +715,33 @@ namespace Godot
}
/// <summary>
+ /// Returns a copy of the string with characters removed from the left.
+ /// </summary>
+ /// <param name="instance">The string to remove characters from.</param>
+ /// <param name="chars">The characters to be removed.</param>
+ /// <returns>A copy of the string with characters removed from the left.</returns>
+ public static string LStrip(this string instance, string chars)
+ {
+ int len = instance.Length;
+ int beg;
+
+ for (beg = 0; beg < len; beg++)
+ {
+ if (chars.Find(instance[beg]) == -1)
+ {
+ break;
+ }
+ }
+
+ if (beg == 0)
+ {
+ return instance;
+ }
+
+ return instance.Substr(beg, len - beg);
+ }
+
+ /// <summary>
/// Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'.
/// </summary>
private static bool ExprMatch(this string instance, string expr, bool caseSensitive)
@@ -886,6 +969,33 @@ namespace Godot
return instance.Substring(pos, instance.Length - pos);
}
+ /// <summary>
+ /// Returns a copy of the string with characters removed from the right.
+ /// </summary>
+ /// <param name="instance">The string to remove characters from.</param>
+ /// <param name="chars">The characters to be removed.</param>
+ /// <returns>A copy of the string with characters removed from the right.</returns>
+ public static string RStrip(this string instance, string chars)
+ {
+ int len = instance.Length;
+ int end;
+
+ for (end = len - 1; end >= 0; end--)
+ {
+ if (chars.Find(instance[end]) == -1)
+ {
+ break;
+ }
+ }
+
+ if (end == len - 1)
+ {
+ return instance;
+ }
+
+ return instance.Substr(0, end + 1);
+ }
+
public static byte[] SHA256Buffer(this string instance)
{
return godot_icall_String_sha256_buffer(instance);
diff --git a/modules/mono/godotsharp_dirs.cpp b/modules/mono/godotsharp_dirs.cpp
index 4233732bff..093a935288 100644
--- a/modules/mono/godotsharp_dirs.cpp
+++ b/modules/mono/godotsharp_dirs.cpp
@@ -322,5 +322,4 @@ String get_data_mono_bin_dir() {
return _GodotSharpDirs::get_singleton().data_mono_bin_dir;
}
#endif
-
} // namespace GodotSharpDirs
diff --git a/modules/mono/godotsharp_dirs.h b/modules/mono/godotsharp_dirs.h
index 6391616419..85be506c28 100644
--- a/modules/mono/godotsharp_dirs.h
+++ b/modules/mono/godotsharp_dirs.h
@@ -66,7 +66,6 @@ String get_data_mono_lib_dir();
#ifdef WINDOWS_ENABLED
String get_data_mono_bin_dir();
#endif
-
} // namespace GodotSharpDirs
#endif // GODOTSHARP_DIRS_H
diff --git a/modules/mono/mono_gc_handle.h b/modules/mono/mono_gc_handle.h
index 5c3a210e97..b85dc70af3 100644
--- a/modules/mono/mono_gc_handle.h
+++ b/modules/mono/mono_gc_handle.h
@@ -42,7 +42,6 @@ enum class GCHandleType : char {
STRONG_HANDLE,
WEAK_HANDLE
};
-
}
// Manual release of the GC handle must be done when using this struct
diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp
index 0e335b3349..772961291c 100644
--- a/modules/mono/mono_gd/gd_mono.cpp
+++ b/modules/mono/mono_gd/gd_mono.cpp
@@ -201,7 +201,6 @@ MonoDomain *gd_initialize_mono_runtime() {
return mono_jit_init_version("GodotEngine.RootDomain", runtime_version);
}
#endif
-
} // namespace
void GDMono::add_mono_shared_libs_dir_to_path() {
diff --git a/modules/mono/mono_gd/gd_mono.h b/modules/mono/mono_gd/gd_mono.h
index 18f7418049..969296c44d 100644
--- a/modules/mono/mono_gd/gd_mono.h
+++ b/modules/mono/mono_gd/gd_mono.h
@@ -283,7 +283,6 @@ public:
}
}
};
-
} // namespace gdmono
#define _GDMONO_SCOPE_DOMAIN_(m_mono_domain) \
diff --git a/modules/mono/mono_gd/gd_mono_cache.cpp b/modules/mono/mono_gd/gd_mono_cache.cpp
index 29aef6e609..3f51c6523b 100644
--- a/modules/mono/mono_gd/gd_mono_cache.cpp
+++ b/modules/mono/mono_gd/gd_mono_cache.cpp
@@ -316,5 +316,4 @@ void update_godot_api_cache() {
cached_data.godot_api_cache_updated = true;
}
-
} // namespace GDMonoCache
diff --git a/modules/mono/mono_gd/gd_mono_cache.h b/modules/mono/mono_gd/gd_mono_cache.h
index a7bbc763a7..9dfa5769be 100644
--- a/modules/mono/mono_gd/gd_mono_cache.h
+++ b/modules/mono/mono_gd/gd_mono_cache.h
@@ -181,7 +181,6 @@ inline void clear_corlib_cache() {
inline void clear_godot_api_cache() {
cached_data.clear_godot_api_cache();
}
-
} // namespace GDMonoCache
#define CACHED_CLASS(m_class) (GDMonoCache::cached_data.class_##m_class)
diff --git a/modules/mono/mono_gd/gd_mono_internals.cpp b/modules/mono/mono_gd/gd_mono_internals.cpp
index 0ed9e441ef..82f916e8c5 100644
--- a/modules/mono/mono_gd/gd_mono_internals.cpp
+++ b/modules/mono/mono_gd/gd_mono_internals.cpp
@@ -127,5 +127,4 @@ void unhandled_exception(MonoException *p_exc) {
#endif
}
}
-
} // namespace GDMonoInternals
diff --git a/modules/mono/mono_gd/gd_mono_internals.h b/modules/mono/mono_gd/gd_mono_internals.h
index d1d5eca263..0fd6250785 100644
--- a/modules/mono/mono_gd/gd_mono_internals.h
+++ b/modules/mono/mono_gd/gd_mono_internals.h
@@ -46,7 +46,6 @@ void tie_managed_to_unmanaged(MonoObject *managed, Object *unmanaged);
* Use GDMonoUtils::debug_unhandled_exception(MonoException *) instead.
*/
void unhandled_exception(MonoException *p_exc);
-
} // namespace GDMonoInternals
#endif // GD_MONO_INTERNALS_H
diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp
index 9d193ab8ab..eee880ba60 100644
--- a/modules/mono/mono_gd/gd_mono_marshal.cpp
+++ b/modules/mono/mono_gd/gd_mono_marshal.cpp
@@ -1536,5 +1536,4 @@ M_SignalInfo signal_info_to_managed(const Signal &p_signal) {
MonoObject *name_string_name_managed = GDMonoUtils::create_managed_from(p_signal.get_name());
return { owner_managed, name_string_name_managed };
}
-
} // namespace GDMonoMarshal
diff --git a/modules/mono/mono_gd/gd_mono_marshal.h b/modules/mono/mono_gd/gd_mono_marshal.h
index d2c564d67d..d1d5f1f202 100644
--- a/modules/mono/mono_gd/gd_mono_marshal.h
+++ b/modules/mono/mono_gd/gd_mono_marshal.h
@@ -271,7 +271,6 @@ static_assert(MATCHES_Vector2 && MATCHES_Rect2 && MATCHES_Transform2D && MATCHES
MATCHES_Plane && MATCHES_Vector2i && MATCHES_Rect2i && MATCHES_Vector3i);
/* clang-format on */
#endif
-
} // namespace InteropLayout
#pragma pack(push, 1)
@@ -517,7 +516,6 @@ DECL_TYPE_MARSHAL_TEMPLATES(Plane)
#define MARSHALLED_IN(m_type, m_from_ptr) (GDMonoMarshal::marshalled_in_##m_type(m_from_ptr))
#define MARSHALLED_OUT(m_type, m_from) (GDMonoMarshal::marshalled_out_##m_type(m_from))
-
} // namespace GDMonoMarshal
#endif // GDMONOMARSHAL_H
diff --git a/modules/mono/mono_gd/gd_mono_utils.cpp b/modules/mono/mono_gd/gd_mono_utils.cpp
index 2676165cbc..97fc4c57f9 100644
--- a/modules/mono/mono_gd/gd_mono_utils.cpp
+++ b/modules/mono/mono_gd/gd_mono_utils.cpp
@@ -659,7 +659,6 @@ GDMonoClass *make_generic_dictionary_type(MonoReflectionType *p_key_reftype, Mon
UNHANDLED_EXCEPTION(exc);
return GDMono::get_singleton()->get_class(mono_class_from_mono_type(mono_reflection_type_get_type(reftype)));
}
-
} // namespace Marshal
ScopeThreadAttach::ScopeThreadAttach() {
@@ -679,5 +678,4 @@ StringName get_native_godot_class_name(GDMonoClass *p_class) {
StringName *ptr = GDMonoMarshal::unbox<StringName *>(CACHED_FIELD(StringName, ptr)->get_value(native_name_obj));
return ptr ? *ptr : StringName();
}
-
} // namespace GDMonoUtils
diff --git a/modules/mono/mono_gd/gd_mono_utils.h b/modules/mono/mono_gd/gd_mono_utils.h
index 7088385c4f..71c131f77c 100644
--- a/modules/mono/mono_gd/gd_mono_utils.h
+++ b/modules/mono/mono_gd/gd_mono_utils.h
@@ -64,7 +64,6 @@ void dictionary_get_key_value_types(MonoReflectionType *p_dict_reftype, MonoRefl
GDMonoClass *make_generic_array_type(MonoReflectionType *p_elem_reftype);
GDMonoClass *make_generic_dictionary_type(MonoReflectionType *p_key_reftype, MonoReflectionType *p_value_reftype);
-
} // namespace Marshal
_FORCE_INLINE_ void hash_combine(uint32_t &p_hash, const uint32_t &p_with_hash) {
@@ -156,7 +155,6 @@ private:
};
StringName get_native_godot_class_name(GDMonoClass *p_class);
-
} // namespace GDMonoUtils
#define NATIVE_GDMONOCLASS_NAME(m_class) (GDMonoUtils::get_native_godot_class_name(m_class))
diff --git a/modules/mono/mono_gd/support/android_support.cpp b/modules/mono/mono_gd/support/android_support.cpp
index 386e0576b3..18daf859b5 100644
--- a/modules/mono/mono_gd/support/android_support.cpp
+++ b/modules/mono/mono_gd/support/android_support.cpp
@@ -387,7 +387,6 @@ void cleanup() {
certStore = nullptr;
}
}
-
} // namespace support
} // namespace android
} // namespace gdmono
diff --git a/modules/mono/mono_gd/support/android_support.h b/modules/mono/mono_gd/support/android_support.h
index 5947395a99..df51100bef 100755
--- a/modules/mono/mono_gd/support/android_support.h
+++ b/modules/mono/mono_gd/support/android_support.h
@@ -45,7 +45,6 @@ void initialize();
void cleanup();
void register_internal_calls();
-
} // namespace support
} // namespace android
} // namespace gdmono
diff --git a/modules/mono/mono_gd/support/ios_support.h b/modules/mono/mono_gd/support/ios_support.h
index ed251cb23a..48cef890d6 100755
--- a/modules/mono/mono_gd/support/ios_support.h
+++ b/modules/mono/mono_gd/support/ios_support.h
@@ -41,7 +41,6 @@ namespace support {
void initialize();
void cleanup();
-
} // namespace support
} // namespace ios
} // namespace gdmono
diff --git a/modules/mono/mono_gd/support/ios_support.mm b/modules/mono/mono_gd/support/ios_support.mm
index dc23c06eba..e6e09c4146 100644
--- a/modules/mono/mono_gd/support/ios_support.mm
+++ b/modules/mono/mono_gd/support/ios_support.mm
@@ -72,7 +72,6 @@ void initialize() {
void cleanup() {
}
-
} // namespace support
} // namespace ios
} // namespace gdmono
diff --git a/modules/mono/utils/macros.h b/modules/mono/utils/macros.h
index c76619cca4..60c9b9718a 100644
--- a/modules/mono/utils/macros.h
+++ b/modules/mono/utils/macros.h
@@ -64,7 +64,6 @@ public:
template <typename F>
ScopeExit<F> operator+(F p_exit_func) { return ScopeExit<F>(p_exit_func); }
};
-
} // namespace gdmono
#define SCOPE_EXIT \
diff --git a/modules/mono/utils/mono_reg_utils.cpp b/modules/mono/utils/mono_reg_utils.cpp
index a619f0b975..9902744743 100644
--- a/modules/mono/utils/mono_reg_utils.cpp
+++ b/modules/mono/utils/mono_reg_utils.cpp
@@ -225,7 +225,6 @@ cleanup:
return msbuild_tools_path;
}
-
} // namespace MonoRegUtils
#endif // WINDOWS_ENABLED
diff --git a/modules/mono/utils/path_utils.cpp b/modules/mono/utils/path_utils.cpp
index eb0ba8c700..a24097924e 100644
--- a/modules/mono/utils/path_utils.cpp
+++ b/modules/mono/utils/path_utils.cpp
@@ -194,5 +194,4 @@ String relative_to(const String &p_path, const String &p_relative_to) {
return relative_to_impl(path_abs_norm, relative_to_abs_norm);
}
-
} // namespace path
diff --git a/modules/mono/utils/path_utils.h b/modules/mono/utils/path_utils.h
index 458d1bb849..c19cb3bc8b 100644
--- a/modules/mono/utils/path_utils.h
+++ b/modules/mono/utils/path_utils.h
@@ -56,7 +56,6 @@ String abspath(const String &p_path);
String realpath(const String &p_path);
String relative_to(const String &p_path, const String &p_relative_to);
-
} // namespace path
#endif // PATH_UTILS_H
diff --git a/modules/mono/utils/string_utils.cpp b/modules/mono/utils/string_utils.cpp
index 65da4328f6..d70004657c 100644
--- a/modules/mono/utils/string_utils.cpp
+++ b/modules/mono/utils/string_utils.cpp
@@ -84,7 +84,6 @@ int sfind(const String &p_text, int p_from) {
return -1;
}
-
} // namespace
String sformat(const String &p_text, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4, const Variant &p5) {
diff --git a/modules/pvr/texture_loader_pvr.cpp b/modules/pvr/texture_loader_pvr.cpp
index 050dce1aab..0923714387 100644
--- a/modules/pvr/texture_loader_pvr.cpp
+++ b/modules/pvr/texture_loader_pvr.cpp
@@ -38,7 +38,6 @@
static void _pvrtc_decompress(Image *p_img);
enum PVRFLags {
-
PVR_HAS_MIPMAPS = 0x00000100,
PVR_TWIDDLED = 0x00000200,
PVR_NORMAL_MAP = 0x00000400,
@@ -48,7 +47,6 @@ enum PVRFLags {
PVR_VOLUME_TEXTURES = 0x00004000,
PVR_HAS_ALPHA = 0x00008000,
PVR_VFLIP = 0x00010000
-
};
RES ResourceFormatPVR::load(const String &p_path, const String &p_original_path, Error *r_error, bool p_use_sub_threads, float *r_progress, bool p_no_cache) {
diff --git a/modules/upnp/upnp.h b/modules/upnp/upnp.h
index e87f93e697..81d770ec4c 100644
--- a/modules/upnp/upnp.h
+++ b/modules/upnp/upnp.h
@@ -57,7 +57,6 @@ protected:
public:
enum UPNPResult {
-
UPNP_RESULT_SUCCESS,
UPNP_RESULT_NOT_AUTHORIZED,
UPNP_RESULT_PORT_MAPPING_NOT_FOUND,
diff --git a/modules/upnp/upnp_device.h b/modules/upnp/upnp_device.h
index a287c99b0d..53d621c90a 100644
--- a/modules/upnp/upnp_device.h
+++ b/modules/upnp/upnp_device.h
@@ -38,7 +38,6 @@ class UPNPDevice : public Reference {
public:
enum IGDStatus {
-
IGD_STATUS_OK,
IGD_STATUS_HTTP_ERROR,
IGD_STATUS_HTTP_EMPTY,
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 1c7d5472cb..b10d4523f2 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -2635,7 +2635,6 @@ void VisualScriptLanguage::debug_get_stack_level_locals(int p_level, List<String
f->debug_get_stack_member_state(*_call_stack[l].line,&locals);
for( List<Pair<StringName,int> >::Element *E = locals.front();E;E=E->next() ) {
-
p_locals->push_back(E->get().first);
p_values->push_back(_call_stack[l].stack[E->get().second]);
}
diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp
index a27307aec2..fe0c399f8d 100644
--- a/modules/visual_script/visual_script_builtin_funcs.cpp
+++ b/modules/visual_script/visual_script_builtin_funcs.cpp
@@ -647,7 +647,6 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons
/*
String VisualScriptBuiltinFunc::get_caption() const {
-
return "BuiltinFunc";
}
diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/visual_script_editor.h
index 66e435741f..5610e6b1b4 100644
--- a/modules/visual_script/visual_script_editor.h
+++ b/modules/visual_script/visual_script_editor.h
@@ -64,7 +64,6 @@ class VisualScriptEditor : public ScriptEditorBase {
};
enum PortAction {
-
CREATE_CALL_SET_GET,
CREATE_ACTION,
};
diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp
index 34a1cfc4fc..b2aa42ef97 100644
--- a/modules/visual_script/visual_script_func_nodes.cpp
+++ b/modules/visual_script/visual_script_func_nodes.cpp
@@ -234,7 +234,6 @@ PropertyInfo VisualScriptFunctionCall::get_output_value_port_info(int p_idx) con
/*MethodBind *mb = ClassDB::get_method(_get_base_type(),function);
if (mb) {
-
ret = mb->get_argument_info(-1);
} else {*/
diff --git a/modules/webrtc/library_godot_webrtc.js b/modules/webrtc/library_godot_webrtc.js
index b75996b1f3..d4c38f15a2 100644
--- a/modules/webrtc/library_godot_webrtc.js
+++ b/modules/webrtc/library_godot_webrtc.js
@@ -32,7 +32,6 @@ var GodotRTCDataChannel = {
// Our socket implementation that forwards events to C++.
$GodotRTCDataChannel__deps: ['$IDHandler', '$GodotOS'],
$GodotRTCDataChannel: {
-
connect: function(p_id, p_on_open, p_on_message, p_on_error, p_on_close) {
const ref = IDHandler.get(p_id);
if (!ref) {
@@ -201,7 +200,6 @@ autoAddDeps(GodotRTCDataChannel, '$GodotRTCDataChannel');
mergeInto(LibraryManager.library, GodotRTCDataChannel);
var GodotRTCPeerConnection = {
-
$GodotRTCPeerConnection__deps: ['$IDHandler', '$GodotOS', '$GodotRTCDataChannel'],
$GodotRTCPeerConnection: {
onstatechange: function(p_id, p_conn, callback, event) {
diff --git a/modules/websocket/library_godot_websocket.js b/modules/websocket/library_godot_websocket.js
index f7d3195807..7076a6f43d 100644
--- a/modules/websocket/library_godot_websocket.js
+++ b/modules/websocket/library_godot_websocket.js
@@ -29,7 +29,6 @@
/*************************************************************************/
var GodotWebSocket = {
-
// Our socket implementation that forwards events to C++.
$GodotWebSocket__deps: ['$IDHandler'],
$GodotWebSocket: {
@@ -163,10 +162,8 @@ var GodotWebSocket = {
for(i = 0; i < p_buf_len; i++) {
bytes_array[i] = getValue(p_buf + i, 'i8');
}
- var out = bytes_array;
- if (p_raw) {
- out = bytes_array.buffer;
- } else {
+ var out = bytes_array.buffer;
+ if (!p_raw) {
out = new TextDecoder("utf-8").decode(bytes_array);
}
return GodotWebSocket.send(p_id, out);
diff --git a/platform/android/api/java_class_wrapper.h b/platform/android/api/java_class_wrapper.h
index 4718de29ad..64da049407 100644
--- a/platform/android/api/java_class_wrapper.h
+++ b/platform/android/api/java_class_wrapper.h
@@ -47,7 +47,6 @@ class JavaClass : public Reference {
#ifdef ANDROID_ENABLED
enum ArgumentType{
-
ARG_TYPE_VOID,
ARG_TYPE_BOOLEAN,
ARG_TYPE_BYTE,
diff --git a/platform/android/audio_driver_opensl.h b/platform/android/audio_driver_opensl.h
index 9858a40822..b30711705b 100644
--- a/platform/android/audio_driver_opensl.h
+++ b/platform/android/audio_driver_opensl.h
@@ -42,7 +42,6 @@ class AudioDriverOpenSL : public AudioDriver {
Mutex mutex;
enum {
-
BUFFER_COUNT = 2
};
diff --git a/platform/android/export/export.cpp b/platform/android/export/export.cpp
index 53b43ae0e8..35a7c54a8f 100644
--- a/platform/android/export/export.cpp
+++ b/platform/android/export/export.cpp
@@ -2269,6 +2269,13 @@ public:
Error _zip_align_project(const String &sdk_path, const String &unaligned_file_path, const String &aligned_file_path) {
// Look for the zipalign tool.
+ String zipalign_command_name;
+#ifdef WINDOWS_ENABLED
+ zipalign_command_name = "zipalign.exe";
+#else
+ zipalign_command_name = "zipalign";
+#endif
+
String zipalign_command;
Error errn;
String build_tools_dir = sdk_path.plus_file("build-tools");
@@ -2283,7 +2290,7 @@ public:
while (!sub_dir.empty()) {
if (!sub_dir.begins_with(".") && da->current_is_dir()) {
// Check if the tool is here.
- String tool_path = build_tools_dir.plus_file(sub_dir).plus_file("zipalign");
+ String tool_path = build_tools_dir.plus_file(sub_dir).plus_file(zipalign_command_name);
if (FileAccess::exists(tool_path)) {
zipalign_command = tool_path;
break;
diff --git a/platform/android/file_access_android.cpp b/platform/android/file_access_android.cpp
index 11faeff3e8..2446ca2829 100644
--- a/platform/android/file_access_android.cpp
+++ b/platform/android/file_access_android.cpp
@@ -34,7 +34,6 @@
AAssetManager *FileAccessAndroid::asset_manager = nullptr;
/*void FileAccessAndroid::make_default() {
-
create_func=create_android;
}*/
diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java
index 6cf340c418..3bbe35091c 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java
@@ -760,9 +760,7 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
/*
@Override public boolean dispatchKeyEvent(KeyEvent event) {
-
if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
-
System.out.printf("** BACK REQUEST!\n");
GodotLib.quit();
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
index 874fd88848..894009e30f 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
@@ -515,13 +515,13 @@ public class GodotIO {
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
} break;
case SCREEN_SENSOR_LANDSCAPE: {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
+ activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);
} break;
case SCREEN_SENSOR_PORTRAIT: {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
+ activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT);
} break;
case SCREEN_SENSOR: {
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
+ activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
} break;
}
}
diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt
index 7fa8e3b4e5..f93cf0fa38 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkRenderer.kt
@@ -52,7 +52,6 @@ import org.godotengine.godot.plugin.GodotPluginRegistry
* @see [VkSurfaceView.startRenderer]
*/
internal class VkRenderer {
-
private val pluginRegistry: GodotPluginRegistry = GodotPluginRegistry.getPluginRegistry()
/**
diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt
index 6b0e12b21a..e5c7a39bfb 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkSurfaceView.kt
@@ -50,7 +50,6 @@ import android.view.SurfaceView
* </ul>
*/
open internal class VkSurfaceView(context: Context) : SurfaceView(context), SurfaceHolder.Callback {
-
companion object {
fun checkState(expression: Boolean, errorMessage: Any) {
check(expression) { errorMessage.toString() }
diff --git a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt
index 7557c8aa22..fb02e3a69f 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt
+++ b/platform/android/java/lib/src/org/godotengine/godot/vulkan/VkThread.kt
@@ -41,7 +41,6 @@ import kotlin.concurrent.withLock
* The implementation is modeled after [android.opengl.GLSurfaceView]'s GLThread.
*/
internal class VkThread(private val vkSurfaceView: VkSurfaceView, private val vkRenderer: VkRenderer) : Thread(TAG) {
-
companion object {
private val TAG = VkThread::class.java.simpleName
}
@@ -226,5 +225,4 @@ internal class VkThread(private val vkSurfaceView: VkSurfaceView, private val vk
threadExiting()
}
}
-
}
diff --git a/platform/iphone/SCsub b/platform/iphone/SCsub
index d289e3a16f..ee7b2f4ab5 100644
--- a/platform/iphone/SCsub
+++ b/platform/iphone/SCsub
@@ -14,6 +14,7 @@ iphone_lib = [
"joypad_iphone.mm",
"godot_view.mm",
"display_layer.mm",
+ "godot_app_delegate.m",
"godot_view_renderer.mm",
"godot_view_gesture_recognizer.mm",
"device_metrics.m",
diff --git a/platform/iphone/export/export.cpp b/platform/iphone/export/export.cpp
index cbef136247..62fcfffbb7 100644
--- a/platform/iphone/export/export.cpp
+++ b/platform/iphone/export/export.cpp
@@ -690,7 +690,6 @@ static const IconInfo icon_infos[] = {
{ "optional_icons/spotlight_80x80", "iphone", "Icon-80.png", "80", "2x", "40x40", false },
{ "optional_icons/spotlight_80x80", "ipad", "Icon-80.png", "80", "2x", "40x40", false }
-
};
Error EditorExportPlatformIOS::_export_icons(const Ref<EditorExportPreset> &p_preset, const String &p_iconset_dir) {
diff --git a/platform/iphone/godot_app_delegate.h b/platform/iphone/godot_app_delegate.h
new file mode 100644
index 0000000000..ebb21c499b
--- /dev/null
+++ b/platform/iphone/godot_app_delegate.h
@@ -0,0 +1,41 @@
+/*************************************************************************/
+/* godot_app_delegate.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 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. */
+/*************************************************************************/
+
+#import <UIKit/UIKit.h>
+
+typedef NSObject<UIApplicationDelegate> ApplicationDelegateService;
+
+@interface GodotApplicalitionDelegate : NSObject <UIApplicationDelegate>
+
+@property(class, readonly, strong) NSArray<ApplicationDelegateService *> *services;
+
++ (void)addService:(ApplicationDelegateService *)service;
+
+@end
diff --git a/platform/iphone/godot_app_delegate.m b/platform/iphone/godot_app_delegate.m
new file mode 100644
index 0000000000..a5aad26bd5
--- /dev/null
+++ b/platform/iphone/godot_app_delegate.m
@@ -0,0 +1,497 @@
+/*************************************************************************/
+/* godot_app_delegate.m */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 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. */
+/*************************************************************************/
+
+#import "godot_app_delegate.h"
+
+#import "app_delegate.h"
+
+@interface GodotApplicalitionDelegate ()
+
+@end
+
+@implementation GodotApplicalitionDelegate
+
+static NSMutableArray<ApplicationDelegateService *> *services = nil;
+
++ (NSArray<ApplicationDelegateService *> *)services {
+ return services;
+}
+
++ (void)load {
+ services = [NSMutableArray new];
+ [services addObject:[AppDelegate new]];
+}
+
++ (void)addService:(ApplicationDelegateService *)service {
+ if (!services || !service) {
+ return;
+ }
+ [services addObject:service];
+}
+
+// UIApplicationDelegate documantation can be found here: https://developer.apple.com/documentation/uikit/uiapplicationdelegate
+
+// MARK: Window
+
+- (UIWindow *)window {
+ UIWindow *result = nil;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ UIWindow *value = [service window];
+
+ if (value) {
+ result = value;
+ }
+ }
+
+ return result;
+}
+
+// MARK: Initializing
+
+- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application willFinishLaunchingWithOptions:launchOptions]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary<UIApplicationLaunchOptionsKey, id> *)launchOptions {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application didFinishLaunchingWithOptions:launchOptions]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+/* Can be handled by Info.plist. Not yet supported by Godot.
+
+// MARK: Scene
+
+- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {}
+
+- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {}
+
+*/
+
+// MARK: Life-Cycle
+
+- (void)applicationDidBecomeActive:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationDidBecomeActive:application];
+ }
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationWillResignActive:application];
+ }
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationDidEnterBackground:application];
+ }
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationWillEnterForeground:application];
+ }
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationWillTerminate:application];
+ }
+}
+
+// MARK: Environment Changes
+
+- (void)applicationProtectedDataDidBecomeAvailable:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationProtectedDataDidBecomeAvailable:application];
+ }
+}
+
+- (void)applicationProtectedDataWillBecomeUnavailable:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationProtectedDataWillBecomeUnavailable:application];
+ }
+}
+
+- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationDidReceiveMemoryWarning:application];
+ }
+}
+
+- (void)applicationSignificantTimeChange:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationSignificantTimeChange:application];
+ }
+}
+
+// MARK: App State Restoration
+
+- (BOOL)application:(UIApplication *)application shouldSaveSecureApplicationState:(NSCoder *)coder API_AVAILABLE(ios(13.2)) {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application shouldSaveSecureApplicationState:coder]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+- (BOOL)application:(UIApplication *)application shouldRestoreSecureApplicationState:(NSCoder *)coder API_AVAILABLE(ios(13.2)) {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application shouldRestoreSecureApplicationState:coder]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+- (UIViewController *)application:(UIApplication *)application viewControllerWithRestorationIdentifierPath:(NSArray<NSString *> *)identifierComponents coder:(NSCoder *)coder {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ UIViewController *controller = [service application:application viewControllerWithRestorationIdentifierPath:identifierComponents coder:coder];
+
+ if (controller) {
+ return controller;
+ }
+ }
+
+ return nil;
+}
+
+- (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application willEncodeRestorableStateWithCoder:coder];
+ }
+}
+
+- (void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application didDecodeRestorableStateWithCoder:coder];
+ }
+}
+
+// MARK: Download Data in Background
+
+- (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)(void))completionHandler {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application handleEventsForBackgroundURLSession:identifier completionHandler:completionHandler];
+ }
+
+ completionHandler();
+}
+
+// MARK: Remote Notification
+
+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
+ }
+}
+
+- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application didFailToRegisterForRemoteNotificationsWithError:error];
+ }
+}
+
+- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
+ }
+
+ completionHandler(UIBackgroundFetchResultNoData);
+}
+
+// MARK: User Activity and Handling Quick Actions
+
+- (BOOL)application:(UIApplication *)application willContinueUserActivityWithType:(NSString *)userActivityType {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application willContinueUserActivityWithType:userActivityType]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> *restorableObjects))restorationHandler {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application continueUserActivity:userActivity restorationHandler:restorationHandler]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+- (void)application:(UIApplication *)application didUpdateUserActivity:(NSUserActivity *)userActivity {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application didUpdateUserActivity:userActivity];
+ }
+}
+
+- (void)application:(UIApplication *)application didFailToContinueUserActivityWithType:(NSString *)userActivityType error:(NSError *)error {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application didFailToContinueUserActivityWithType:userActivityType error:error];
+ }
+}
+
+- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL succeeded))completionHandler {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application performActionForShortcutItem:shortcutItem completionHandler:completionHandler];
+ }
+}
+
+// MARK: WatchKit
+
+- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *replyInfo))reply {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application handleWatchKitExtensionRequest:userInfo reply:reply];
+ }
+}
+
+// MARK: HealthKit
+
+- (void)applicationShouldRequestHealthAuthorization:(UIApplication *)application {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service applicationShouldRequestHealthAuthorization:application];
+ }
+}
+
+// MARK: Opening an URL
+
+- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:app openURL:url options:options]) {
+ return YES;
+ }
+ }
+
+ return NO;
+}
+
+// MARK: Disallowing Specified App Extension Types
+
+- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(UIApplicationExtensionPointIdentifier)extensionPointIdentifier {
+ BOOL result = NO;
+
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ if ([service application:application shouldAllowExtensionPointIdentifier:extensionPointIdentifier]) {
+ result = YES;
+ }
+ }
+
+ return result;
+}
+
+// MARK: SiriKit
+
+- (id)application:(UIApplication *)application handlerForIntent:(INIntent *)intent API_AVAILABLE(ios(14.0)) {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ id result = [service application:application handlerForIntent:intent];
+
+ if (result) {
+ return result;
+ }
+ }
+
+ return nil;
+}
+
+// MARK: CloudKit
+
+- (void)application:(UIApplication *)application userDidAcceptCloudKitShareWithMetadata:(CKShareMetadata *)cloudKitShareMetadata {
+ for (ApplicationDelegateService *service in services) {
+ if (![service respondsToSelector:_cmd]) {
+ continue;
+ }
+
+ [service application:application userDidAcceptCloudKitShareWithMetadata:cloudKitShareMetadata];
+ }
+}
+
+/* Handled By Info.plist file for now
+
+// MARK: Interface Geometry
+
+- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {}
+
+*/
+
+@end
diff --git a/platform/iphone/main.m b/platform/iphone/main.m
index c292f02822..351b40a881 100644
--- a/platform/iphone/main.m
+++ b/platform/iphone/main.m
@@ -28,7 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
-#import "app_delegate.h"
+#import "godot_app_delegate.h"
#import <UIKit/UIKit.h>
#include <stdio.h>
@@ -49,7 +49,8 @@ int main(int argc, char *argv[]) {
printf("running app main\n");
@autoreleasepool {
- UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ NSString *className = NSStringFromClass([GodotApplicalitionDelegate class]);
+ UIApplicationMain(argc, argv, nil, className);
}
printf("main done\n");
return 0;
diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py
index e6e35f6aa9..71189cf697 100644
--- a/platform/javascript/detect.py
+++ b/platform/javascript/detect.py
@@ -107,7 +107,6 @@ def configure(env):
env["CC"] = "emcc"
env["CXX"] = "em++"
- env["LINK"] = "emcc"
env["AR"] = "emar"
env["RANLIB"] = "emranlib"
diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp
index 768e326e80..af8800d565 100644
--- a/platform/javascript/display_server_javascript.cpp
+++ b/platform/javascript/display_server_javascript.cpp
@@ -600,13 +600,11 @@ void DisplayServerJavaScript::process_joypads() {
#if 0
bool DisplayServerJavaScript::is_joy_known(int p_device) {
-
return Input::get_singleton()->is_joy_mapped(p_device);
}
String DisplayServerJavaScript::get_joy_guid(int p_device) const {
-
return Input::get_singleton()->get_joy_guid_remapped(p_device);
}
#endif
diff --git a/platform/javascript/engine/preloader.js b/platform/javascript/engine/preloader.js
index 17918eae38..b3467d009f 100644
--- a/platform/javascript/engine/preloader.js
+++ b/platform/javascript/engine/preloader.js
@@ -1,5 +1,4 @@
var Preloader = /** @constructor */ function() {
-
var DOWNLOAD_ATTEMPTS_MAX = 4;
var progressFunc = null;
var lastProgress = { loaded: 0, total: 0 };
@@ -20,9 +19,7 @@ var Preloader = /** @constructor */ function() {
}
function onXHREvent(resolve, reject, file, tracker, ev) {
-
if (this.status >= 400) {
-
if (this.status < 500 || ++tracker[file].attempts >= DOWNLOAD_ATTEMPTS_MAX) {
reject(new Error("Failed loading file '" + file + "': " + this.statusText));
this.abort();
@@ -103,7 +100,6 @@ var Preloader = /** @constructor */ function() {
};
var animateProgress = function() {
-
var loaded = 0;
var total = 0;
var totalIsValid = true;
diff --git a/platform/javascript/engine/utils.js b/platform/javascript/engine/utils.js
index 10e3abe91e..8455739a25 100644
--- a/platform/javascript/engine/utils.js
+++ b/platform/javascript/engine/utils.js
@@ -1,5 +1,4 @@
var Utils = {
-
createLocateRewrite: function(execName) {
function rw(path) {
if (path.endsWith('.worker.js')) {
@@ -38,7 +37,6 @@ var Utils = {
},
isWebGLAvailable: function(majorVersion = 1) {
-
var testContext = false;
try {
var testCanvas = document.createElement('canvas');
diff --git a/platform/javascript/native/audio.worklet.js b/platform/javascript/native/audio.worklet.js
index ad7957e45c..f91787b993 100644
--- a/platform/javascript/native/audio.worklet.js
+++ b/platform/javascript/native/audio.worklet.js
@@ -28,7 +28,6 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
class RingBuffer {
-
constructor(p_buffer, p_state) {
this.buffer = p_buffer;
this.avail = p_state;
@@ -46,7 +45,7 @@ class RingBuffer {
read(output) {
const size = this.buffer.length;
- let from = 0
+ let from = 0;
let to_write = output.length;
if (this.rpos + to_write > size) {
const high = size - this.rpos;
@@ -151,7 +150,7 @@ class GodotProcessor extends AudioWorkletProcessor {
const output = outputs[0];
const chunk = output[0].length * output.length;
if (this.output_buffer.length != chunk) {
- this.output_buffer = new Float32Array(chunk)
+ this.output_buffer = new Float32Array(chunk);
}
if (this.output.data_left() >= chunk) {
this.output.read(this.output_buffer);
diff --git a/platform/javascript/native/http_request.js b/platform/javascript/native/http_request.js
index f621689f9d..272154aee3 100644
--- a/platform/javascript/native/http_request.js
+++ b/platform/javascript/native/http_request.js
@@ -28,9 +28,7 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
var GodotHTTPRequest = {
-
$GodotHTTPRequest: {
-
requests: [],
getUnusedRequestId: function() {
diff --git a/platform/javascript/native/library_godot_audio.js b/platform/javascript/native/library_godot_audio.js
index 846359b8b2..3a0c8f297a 100644
--- a/platform/javascript/native/library_godot_audio.js
+++ b/platform/javascript/native/library_godot_audio.js
@@ -29,7 +29,6 @@
/*************************************************************************/
const GodotAudio = {
-
$GodotAudio__deps: ['$GodotOS'],
$GodotAudio: {
ctx: null,
@@ -182,7 +181,6 @@ mergeInto(LibraryManager.library, GodotAudio);
* The AudioWorklet API driver, used when threads are available.
*/
const GodotAudioWorklet = {
-
$GodotAudioWorklet__deps: ['$GodotAudio'],
$GodotAudioWorklet: {
promise: null,
@@ -269,7 +267,6 @@ mergeInto(LibraryManager.library, GodotAudioWorklet);
* The deprecated ScriptProcessorNode API, used when threads are disabled.
*/
const GodotAudioScript = {
-
$GodotAudioScript__deps: ['$GodotAudio'],
$GodotAudioScript: {
script: null,
diff --git a/platform/javascript/native/library_godot_display.js b/platform/javascript/native/library_godot_display.js
index 490b9181d0..11bbfbc60d 100644
--- a/platform/javascript/native/library_godot_display.js
+++ b/platform/javascript/native/library_godot_display.js
@@ -78,7 +78,6 @@ mergeInto(LibraryManager.library, GodotDisplayListeners);
* deferred callbacks won't be able to access the files.
*/
const GodotDisplayDragDrop = {
-
$GodotDisplayDragDrop__deps: ['$FS', '$GodotFS'],
$GodotDisplayDragDrop: {
promises: [],
diff --git a/platform/javascript/native/library_godot_editor_tools.js b/platform/javascript/native/library_godot_editor_tools.js
index bd62bbf4e1..202a198adb 100644
--- a/platform/javascript/native/library_godot_editor_tools.js
+++ b/platform/javascript/native/library_godot_editor_tools.js
@@ -29,7 +29,6 @@
/*************************************************************************/
const GodotEditorTools = {
-
godot_js_editor_download_file__deps: ['$FS'],
godot_js_editor_download_file: function(p_path, p_name, p_mime) {
const path = UTF8ToString(p_path);
diff --git a/platform/javascript/native/library_godot_eval.js b/platform/javascript/native/library_godot_eval.js
index e83c61dd9d..44d356a4fb 100644
--- a/platform/javascript/native/library_godot_eval.js
+++ b/platform/javascript/native/library_godot_eval.js
@@ -29,7 +29,6 @@
/*************************************************************************/
const GodotEval = {
-
godot_js_eval__deps: ['$GodotOS'],
godot_js_eval: function(p_js, p_use_global_ctx, p_union_ptr, p_byte_arr, p_byte_arr_write, p_callback) {
const js_code = UTF8ToString(p_js);
@@ -47,7 +46,6 @@ const GodotEval = {
}
switch (typeof eval_ret) {
-
case 'boolean':
setValue(p_union_ptr, eval_ret, 'i32');
return 1; // BOOL
diff --git a/platform/javascript/native/library_godot_os.js b/platform/javascript/native/library_godot_os.js
index ed48280674..a1424a691a 100644
--- a/platform/javascript/native/library_godot_os.js
+++ b/platform/javascript/native/library_godot_os.js
@@ -53,7 +53,6 @@ autoAddDeps(IDHandler, "$IDHandler");
mergeInto(LibraryManager.library, IDHandler);
const GodotConfig = {
-
$GodotConfig__postset: 'Module["initConfig"] = GodotConfig.init_config;',
$GodotConfig: {
canvas: null,
@@ -209,7 +208,6 @@ const GodotOS = {
'GodotOS._fs_sync_promise = Promise.resolve();',
].join(''),
$GodotOS: {
-
request_quit: function() {},
_async_cbs: [],
_fs_sync_promise: null,
diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py
index ea101e24dd..a1bc5867c5 100644
--- a/platform/linuxbsd/detect.py
+++ b/platform/linuxbsd/detect.py
@@ -129,7 +129,6 @@ def configure(env):
if "clang++" not in os.path.basename(env["CXX"]):
env["CC"] = "clang"
env["CXX"] = "clang++"
- env["LINK"] = "clang++"
env.Append(CPPDEFINES=["TYPED_METHOD_BIND"])
env.extra_suffix = ".llvm" + env.extra_suffix
diff --git a/platform/linuxbsd/display_server_x11.cpp b/platform/linuxbsd/display_server_x11.cpp
index bb8086d3a3..5fa737af8e 100644
--- a/platform/linuxbsd/display_server_x11.cpp
+++ b/platform/linuxbsd/display_server_x11.cpp
@@ -794,7 +794,9 @@ void DisplayServerX11::window_set_title(const String &p_title, WindowID p_window
Atom _net_wm_name = XInternAtom(x11_display, "_NET_WM_NAME", false);
Atom utf8_string = XInternAtom(x11_display, "UTF8_STRING", false);
- XChangeProperty(x11_display, wd.x11_window, _net_wm_name, utf8_string, 8, PropModeReplace, (unsigned char *)p_title.utf8().get_data(), p_title.utf8().length());
+ if (_net_wm_name != None && utf8_string != None) {
+ XChangeProperty(x11_display, wd.x11_window, _net_wm_name, utf8_string, 8, PropModeReplace, (unsigned char *)p_title.utf8().get_data(), p_title.utf8().length());
+ }
}
void DisplayServerX11::window_set_mouse_passthrough(const Vector<Vector2> &p_region, WindowID p_window) {
@@ -1276,7 +1278,9 @@ void DisplayServerX11::_set_wm_fullscreen(WindowID p_window, bool p_enabled) {
hints.flags = 2;
hints.decorations = 0;
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
- XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ if (property != None) {
+ XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ }
}
if (p_enabled) {
@@ -1303,7 +1307,9 @@ void DisplayServerX11::_set_wm_fullscreen(WindowID p_window, bool p_enabled) {
// set bypass compositor hint
Atom bypass_compositor = XInternAtom(x11_display, "_NET_WM_BYPASS_COMPOSITOR", False);
unsigned long compositing_disable_on = p_enabled ? 1 : 0;
- XChangeProperty(x11_display, wd.x11_window, bypass_compositor, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&compositing_disable_on, 1);
+ if (bypass_compositor != None) {
+ XChangeProperty(x11_display, wd.x11_window, bypass_compositor, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&compositing_disable_on, 1);
+ }
XFlush(x11_display);
@@ -1317,7 +1323,9 @@ void DisplayServerX11::_set_wm_fullscreen(WindowID p_window, bool p_enabled) {
hints.flags = 2;
hints.decorations = window_get_flag(WINDOW_FLAG_BORDERLESS, p_window) ? 0 : 1;
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
- XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ if (property != None) {
+ XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ }
}
}
@@ -1511,7 +1519,9 @@ void DisplayServerX11::window_set_flag(WindowFlags p_flag, bool p_enabled, Windo
hints.flags = 2;
hints.decorations = p_enabled ? 0 : 1;
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
- XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ if (property != None) {
+ XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ }
// Preserve window size
window_set_size(window_get_size(p_window), p_window);
@@ -3385,7 +3395,9 @@ void DisplayServerX11::set_icon(const Ref<Image> &p_icon) {
pr += 4;
}
- XChangeProperty(x11_display, wd.x11_window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)pd.ptr(), pd.size());
+ if (net_wm_icon != None) {
+ XChangeProperty(x11_display, wd.x11_window, net_wm_icon, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)pd.ptr(), pd.size());
+ }
if (!g_set_icon_error) {
break;
@@ -3478,7 +3490,9 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, u
{
const long pid = OS::get_singleton()->get_process_id();
Atom net_wm_pid = XInternAtom(x11_display, "_NET_WM_PID", False);
- XChangeProperty(x11_display, wd.x11_window, net_wm_pid, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&pid, 1);
+ if (net_wm_pid != None) {
+ XChangeProperty(x11_display, wd.x11_window, net_wm_pid, XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&pid, 1);
+ }
}
long im_event_mask = 0;
@@ -3526,7 +3540,9 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, u
/* set the titlebar name */
XStoreName(x11_display, wd.x11_window, "Godot");
XSetWMProtocols(x11_display, wd.x11_window, &wm_delete, 1);
- XChangeProperty(x11_display, wd.x11_window, xdnd_aware, XA_ATOM, 32, PropModeReplace, (unsigned char *)&xdnd_version, 1);
+ if (xdnd_aware != None) {
+ XChangeProperty(x11_display, wd.x11_window, xdnd_aware, XA_ATOM, 32, PropModeReplace, (unsigned char *)&xdnd_version, 1);
+ }
if (xim && xim_style) {
// Block events polling while changing input focus
@@ -3557,20 +3573,25 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, u
hints.flags = 2;
hints.decorations = 0;
property = XInternAtom(x11_display, "_MOTIF_WM_HINTS", True);
- XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ if (property != None) {
+ XChangeProperty(x11_display, wd.x11_window, property, property, 32, PropModeReplace, (unsigned char *)&hints, 5);
+ }
}
if (wd.menu_type) {
// Set Utility type to disable fade animations.
Atom type_atom = XInternAtom(x11_display, "_NET_WM_WINDOW_TYPE_UTILITY", False);
Atom wt_atom = XInternAtom(x11_display, "_NET_WM_WINDOW_TYPE", False);
-
- XChangeProperty(x11_display, wd.x11_window, wt_atom, XA_ATOM, 32, PropModeReplace, (unsigned char *)&type_atom, 1);
+ if (wt_atom != None && type_atom != None) {
+ XChangeProperty(x11_display, wd.x11_window, wt_atom, XA_ATOM, 32, PropModeReplace, (unsigned char *)&type_atom, 1);
+ }
} else {
Atom type_atom = XInternAtom(x11_display, "_NET_WM_WINDOW_TYPE_NORMAL", False);
Atom wt_atom = XInternAtom(x11_display, "_NET_WM_WINDOW_TYPE", False);
- XChangeProperty(x11_display, wd.x11_window, wt_atom, XA_ATOM, 32, PropModeReplace, (unsigned char *)&type_atom, 1);
+ if (wt_atom != None && type_atom != None) {
+ XChangeProperty(x11_display, wd.x11_window, wt_atom, XA_ATOM, 32, PropModeReplace, (unsigned char *)&type_atom, 1);
+ }
}
_update_size_hints(id);
diff --git a/platform/linuxbsd/joypad_linux.cpp b/platform/linuxbsd/joypad_linux.cpp
index fda1358dfd..4a9d0a8181 100644
--- a/platform/linuxbsd/joypad_linux.cpp
+++ b/platform/linuxbsd/joypad_linux.cpp
@@ -459,9 +459,9 @@ void JoypadLinux::process_joypads() {
case ABS_HAT0X:
if (ev.value != 0) {
if (ev.value < 0) {
- joy->dpad |= Input::HAT_MASK_LEFT;
+ joy->dpad = (joy->dpad | Input::HAT_MASK_LEFT) & ~Input::HAT_MASK_RIGHT;
} else {
- joy->dpad |= Input::HAT_MASK_RIGHT;
+ joy->dpad = (joy->dpad | Input::HAT_MASK_RIGHT) & ~Input::HAT_MASK_LEFT;
}
} else {
joy->dpad &= ~(Input::HAT_MASK_LEFT | Input::HAT_MASK_RIGHT);
@@ -473,9 +473,9 @@ void JoypadLinux::process_joypads() {
case ABS_HAT0Y:
if (ev.value != 0) {
if (ev.value < 0) {
- joy->dpad |= Input::HAT_MASK_UP;
+ joy->dpad = (joy->dpad | Input::HAT_MASK_UP) & ~Input::HAT_MASK_DOWN;
} else {
- joy->dpad |= Input::HAT_MASK_DOWN;
+ joy->dpad = (joy->dpad | Input::HAT_MASK_DOWN) & ~Input::HAT_MASK_UP;
}
} else {
joy->dpad &= ~(Input::HAT_MASK_UP | Input::HAT_MASK_DOWN);
diff --git a/platform/linuxbsd/key_mapping_x11.cpp b/platform/linuxbsd/key_mapping_x11.cpp
index 77512b1a9e..78049f2dfc 100644
--- a/platform/linuxbsd/key_mapping_x11.cpp
+++ b/platform/linuxbsd/key_mapping_x11.cpp
@@ -185,7 +185,6 @@ struct _TranslatePair {
};
static _TranslatePair _scancode_to_keycode[] = {
-
{ KEY_ESCAPE, 0x09 },
{ KEY_1, 0x0A },
{ KEY_2, 0x0B },
@@ -354,7 +353,6 @@ struct _XTranslateUnicodePair {
};
enum {
-
_KEYSYM_MAX = 759
};
@@ -1160,7 +1158,6 @@ struct _XTranslateUnicodePairReverse {
};
enum {
-
_UNICODE_MAX = 750
};
diff --git a/platform/osx/detect.py b/platform/osx/detect.py
index 64e1d94f39..ea41479bb0 100644
--- a/platform/osx/detect.py
+++ b/platform/osx/detect.py
@@ -87,8 +87,8 @@ def configure(env):
if env["arch"] == "arm64":
print("Building for macOS 10.15+, platform arm64.")
- env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15", "-target", "arm64-apple-macos10.15"])
- env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15", "-target", "arm64-apple-macos10.15"])
+ env.Append(CCFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15"])
+ env.Append(LINKFLAGS=["-arch", "arm64", "-mmacosx-version-min=10.15"])
else:
print("Building for macOS 10.12+, platform x86-64.")
env.Append(CCFLAGS=["-arch", "x86_64", "-mmacosx-version-min=10.12"])
@@ -99,7 +99,6 @@ def configure(env):
mpprefix = os.environ.get("MACPORTS_PREFIX", "/opt/local")
mpclangver = env["macports_clang"]
env["CC"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/clang"
- env["LINK"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/clang++"
env["CXX"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/clang++"
env["AR"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-ar"
env["RANLIB"] = mpprefix + "/libexec/llvm-" + mpclangver + "/bin/llvm-ranlib"
@@ -134,12 +133,6 @@ def configure(env):
env["AS"] = basecmd + "as"
env.Append(CPPDEFINES=["__MACPORTS__"]) # hack to fix libvpx MM256_BROADCASTSI128_SI256 define
- if env["CXX"] == "clang++":
- # This should now work with clang++, re-enable if there are issues
- # env.Append(CPPDEFINES=["TYPED_METHOD_BIND"])
- env["CC"] = "clang"
- env["LINK"] = "clang++"
-
if env["use_ubsan"] or env["use_asan"] or env["use_tsan"]:
env.extra_suffix += "s"
diff --git a/platform/server/detect.py b/platform/server/detect.py
index f9e151f956..a3f60b0710 100644
--- a/platform/server/detect.py
+++ b/platform/server/detect.py
@@ -94,7 +94,6 @@ def configure(env):
if "clang++" not in os.path.basename(env["CXX"]):
env["CC"] = "clang"
env["CXX"] = "clang++"
- env["LINK"] = "clang++"
env.Append(CPPDEFINES=["TYPED_METHOD_BIND"])
env.extra_suffix = ".llvm" + env.extra_suffix
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 934314b2f2..e0b2a52014 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -383,18 +383,17 @@ def configure_mingw(env):
if env["use_llvm"]:
env["CC"] = mingw_prefix + "clang"
- env["AS"] = mingw_prefix + "as"
env["CXX"] = mingw_prefix + "clang++"
+ env["AS"] = mingw_prefix + "as"
env["AR"] = mingw_prefix + "ar"
env["RANLIB"] = mingw_prefix + "ranlib"
- env["LINK"] = mingw_prefix + "clang++"
else:
env["CC"] = mingw_prefix + "gcc"
- env["AS"] = mingw_prefix + "as"
env["CXX"] = mingw_prefix + "g++"
+ env["AS"] = mingw_prefix + "as"
env["AR"] = mingw_prefix + "gcc-ar"
env["RANLIB"] = mingw_prefix + "gcc-ranlib"
- env["LINK"] = mingw_prefix + "g++"
+
env["x86_libtheora_opt_gcc"] = True
if env["use_lto"]:
diff --git a/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp
index d8d0b13068..25eff7df57 100644
--- a/platform/windows/key_mapping_windows.cpp
+++ b/platform/windows/key_mapping_windows.cpp
@@ -38,7 +38,6 @@ struct _WinTranslatePair {
};
static _WinTranslatePair _vk_to_keycode[] = {
-
{ KEY_BACKSPACE, VK_BACK }, // (0x08) // backspace
{ KEY_TAB, VK_TAB }, //(0x09)
@@ -238,7 +237,6 @@ VK_OEM_CLEAR (0xFE)
*/
static _WinTranslatePair _scancode_to_keycode[] = {
-
{ KEY_ESCAPE, 0x01 },
{ KEY_1, 0x02 },
{ KEY_2, 0x03 },
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index b108d74b2e..646bc3aa4c 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -466,8 +466,10 @@ Error OS_Windows::execute(const String &p_path, const List<String> &p_arguments,
ERR_FAIL_COND_V(ret == 0, ERR_CANT_FORK);
if (p_blocking) {
- DWORD ret2 = WaitForSingleObject(pi.pi.hProcess, INFINITE);
+ WaitForSingleObject(pi.pi.hProcess, INFINITE);
if (r_exitcode) {
+ DWORD ret2;
+ GetExitCodeProcess(pi.pi.hProcess, &ret2);
*r_exitcode = ret2;
}
diff --git a/scene/2d/cpu_particles_2d.h b/scene/2d/cpu_particles_2d.h
index 2296e0434e..0f2a3e4920 100644
--- a/scene/2d/cpu_particles_2d.h
+++ b/scene/2d/cpu_particles_2d.h
@@ -46,7 +46,6 @@ public:
};
enum Parameter {
-
PARAM_INITIAL_LINEAR_VELOCITY,
PARAM_ANGULAR_VELOCITY,
PARAM_ORBIT_VELOCITY,
diff --git a/scene/3d/camera_3d.cpp b/scene/3d/camera_3d.cpp
index a6433f8f58..191159448a 100644
--- a/scene/3d/camera_3d.cpp
+++ b/scene/3d/camera_3d.cpp
@@ -519,8 +519,8 @@ void Camera3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "fov", PROPERTY_HINT_RANGE, "1,179,0.1"), "set_fov", "get_fov");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "size", PROPERTY_HINT_RANGE, "0.1,16384,0.01"), "set_size", "get_size");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "frustum_offset"), "set_frustum_offset", "get_frustum_offset");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "near", PROPERTY_HINT_EXP_RANGE, "0.01,8192,0.01,or_greater"), "set_znear", "get_znear");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "far", PROPERTY_HINT_EXP_RANGE, "0.1,8192,0.1,or_greater"), "set_zfar", "get_zfar");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "near", PROPERTY_HINT_EXP_RANGE, "0.001,8192,0.001,or_greater"), "set_znear", "get_znear");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "far", PROPERTY_HINT_EXP_RANGE, "0.01,8192,0.01,or_greater"), "set_zfar", "get_zfar");
BIND_ENUM_CONSTANT(PROJECTION_PERSPECTIVE);
BIND_ENUM_CONSTANT(PROJECTION_ORTHOGONAL);
diff --git a/scene/3d/camera_3d.h b/scene/3d/camera_3d.h
index 6a778d45a2..04cec92b14 100644
--- a/scene/3d/camera_3d.h
+++ b/scene/3d/camera_3d.h
@@ -42,7 +42,6 @@ class Camera3D : public Node3D {
public:
enum Projection {
-
PROJECTION_PERSPECTIVE,
PROJECTION_ORTHOGONAL,
PROJECTION_FRUSTUM
@@ -103,7 +102,6 @@ protected:
public:
enum {
-
NOTIFICATION_BECAME_CURRENT = 50,
NOTIFICATION_LOST_CURRENT = 51
};
diff --git a/scene/3d/cpu_particles_3d.h b/scene/3d/cpu_particles_3d.h
index 078861011b..da4811b60e 100644
--- a/scene/3d/cpu_particles_3d.h
+++ b/scene/3d/cpu_particles_3d.h
@@ -46,7 +46,6 @@ public:
};
enum Parameter {
-
PARAM_INITIAL_LINEAR_VELOCITY,
PARAM_ANGULAR_VELOCITY,
PARAM_ORBIT_VELOCITY,
diff --git a/scene/3d/node_3d.h b/scene/3d/node_3d.h
index 229e0f2c8c..5fb421c930 100644
--- a/scene/3d/node_3d.h
+++ b/scene/3d/node_3d.h
@@ -111,7 +111,6 @@ protected:
public:
enum {
-
NOTIFICATION_TRANSFORM_CHANGED = SceneTree::NOTIFICATION_TRANSFORM_CHANGED,
NOTIFICATION_ENTER_WORLD = 41,
NOTIFICATION_EXIT_WORLD = 42,
diff --git a/scene/3d/path_3d.h b/scene/3d/path_3d.h
index 1aa9f7ffd2..1b0f5fa4e0 100644
--- a/scene/3d/path_3d.h
+++ b/scene/3d/path_3d.h
@@ -57,7 +57,6 @@ class PathFollow3D : public Node3D {
public:
enum RotationMode {
-
ROTATION_NONE,
ROTATION_Y,
ROTATION_XY,
diff --git a/scene/3d/physics_joint_3d.h b/scene/3d/physics_joint_3d.h
index 8e2de82527..d1a375ca5d 100644
--- a/scene/3d/physics_joint_3d.h
+++ b/scene/3d/physics_joint_3d.h
@@ -203,7 +203,6 @@ class ConeTwistJoint3D : public Joint3D {
public:
enum Param {
-
PARAM_SWING_SPAN,
PARAM_TWIST_SPAN,
PARAM_BIAS,
@@ -237,7 +236,6 @@ class Generic6DOFJoint3D : public Joint3D {
public:
enum Param {
-
PARAM_LINEAR_LOWER_LIMIT = PhysicsServer3D::G6DOF_JOINT_LINEAR_LOWER_LIMIT,
PARAM_LINEAR_UPPER_LIMIT = PhysicsServer3D::G6DOF_JOINT_LINEAR_UPPER_LIMIT,
PARAM_LINEAR_LIMIT_SOFTNESS = PhysicsServer3D::G6DOF_JOINT_LINEAR_LIMIT_SOFTNESS,
diff --git a/scene/3d/skeleton_3d.h b/scene/3d/skeleton_3d.h
index 95c49750fa..c54f89d3ce 100644
--- a/scene/3d/skeleton_3d.h
+++ b/scene/3d/skeleton_3d.h
@@ -149,7 +149,6 @@ protected:
public:
enum {
-
NOTIFICATION_UPDATE_SKELETON = 50
};
diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp
index 9f4d64cb32..b6999beff4 100644
--- a/scene/3d/sprite_3d.cpp
+++ b/scene/3d/sprite_3d.cpp
@@ -204,7 +204,6 @@ Ref<TriangleMesh> SpriteBase3D::generate_triangle_mesh() const {
float pixel_size = get_pixel_size();
Vector2 vertices[4] = {
-
(final_rect.position + Vector2(0, final_rect.size.y)) * pixel_size,
(final_rect.position + final_rect.size) * pixel_size,
(final_rect.position + Vector2(final_rect.size.x, 0)) * pixel_size,
@@ -414,7 +413,6 @@ void Sprite3D::_draw() {
float pixel_size = get_pixel_size();
Vector2 vertices[4] = {
-
(final_rect.position + Vector2(0, final_rect.size.y)) * pixel_size,
(final_rect.position + final_rect.size) * pixel_size,
(final_rect.position + Vector2(final_rect.size.x, 0)) * pixel_size,
@@ -740,7 +738,6 @@ void AnimatedSprite3D::_draw() {
float pixel_size = get_pixel_size();
Vector2 vertices[4] = {
-
(final_rect.position + Vector2(0, final_rect.size.y)) * pixel_size,
(final_rect.position + final_rect.size) * pixel_size,
(final_rect.position + Vector2(final_rect.size.x, 0)) * pixel_size,
diff --git a/scene/3d/vehicle_body_3d.cpp b/scene/3d/vehicle_body_3d.cpp
index b58f313c16..e27307e75f 100644
--- a/scene/3d/vehicle_body_3d.cpp
+++ b/scene/3d/vehicle_body_3d.cpp
@@ -634,7 +634,6 @@ VehicleBody3D::btVehicleWheelContactPoint::btVehicleWheelContactPoint(PhysicsDir
/* TODO: Why is this code unused?
if (body1) {
-
Vector3 r0 = frictionPosWorld - body1->get_global_transform().origin;
Vector3 c0 = (r0).cross(frictionDirectionWorld);
Vector3 vec = s->get_inverse_inertia_tensor().xform_inv(c0).cross(r0);
diff --git a/scene/3d/voxelizer.cpp b/scene/3d/voxelizer.cpp
index de5496ee35..c570fc7b7c 100644
--- a/scene/3d/voxelizer.cpp
+++ b/scene/3d/voxelizer.cpp
@@ -580,7 +580,6 @@ void Voxelizer::_fixup_plot(int p_idx, int p_level) {
/*if (bake_light.size()) {
for(int i=0;i<6;i++) {
-
}
}*/
diff --git a/scene/animation/animation_player.h b/scene/animation/animation_player.h
index e1b9dffb1f..dbce5643c7 100644
--- a/scene/animation/animation_player.h
+++ b/scene/animation/animation_player.h
@@ -72,7 +72,6 @@ public:
private:
enum {
-
NODE_CACHE_UPDATE_MAX = 1024,
BLEND_FROM_MAX = 3
};
diff --git a/scene/animation/tween.h b/scene/animation/tween.h
index 668870c526..822fcf0b6f 100644
--- a/scene/animation/tween.h
+++ b/scene/animation/tween.h
@@ -69,7 +69,6 @@ public:
private:
enum InterpolateType {
-
INTER_PROPERTY,
INTER_METHOD,
FOLLOW_PROPERTY,
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 3414b04978..0381f69bcb 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -339,7 +339,6 @@ void Control::_get_property_list(List<PropertyInfo> *p_list) const {
Ref<Theme> theme = Theme::get_default();
/* Using the default theme since the properties below are meant for editor only
if (data.theme.is_valid()) {
-
theme = data.theme;
} else {
theme = Theme::get_default();
@@ -728,13 +727,13 @@ Size2 Control::get_minimum_size() const {
}
template <class T>
-bool Control::_find_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, T &r_ret, T (Theme::*get_func)(const StringName &, const StringName &) const, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_type) {
+bool Control::_find_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, T &r_ret, T (Theme::*get_func)(const StringName &, const StringName &) const, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_node_type) {
// try with custom themes
Control *theme_owner = p_theme_owner;
Window *theme_owner_window = p_theme_owner_window;
while (theme_owner || theme_owner_window) {
- StringName class_name = p_type;
+ StringName class_name = p_node_type;
while (class_name != StringName()) {
if (theme_owner && (theme_owner->data.theme.operator->()->*has_func)(p_name, class_name)) {
@@ -771,13 +770,13 @@ bool Control::_find_theme_item(Control *p_theme_owner, Window *p_theme_owner_win
return false;
}
-bool Control::_has_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_type) {
+bool Control::_has_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_node_type) {
// try with custom themes
Control *theme_owner = p_theme_owner;
Window *theme_owner_window = p_theme_owner_window;
while (theme_owner || theme_owner_window) {
- StringName class_name = p_type;
+ StringName class_name = p_node_type;
while (class_name != StringName()) {
if (theme_owner && (theme_owner->data.theme.operator->()->*has_func)(p_name, class_name)) {
@@ -812,176 +811,176 @@ bool Control::_has_theme_item(Control *p_theme_owner, Window *p_theme_owner_wind
return false;
}
-Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
const Ref<Texture2D> *tex = data.icon_override.getptr(p_name);
if (tex) {
return *tex;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return get_icons(data.theme_owner, data.theme_owner_window, p_name, type);
}
-Ref<Texture2D> Control::get_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
+Ref<Texture2D> Control::get_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
Ref<Texture2D> icon;
- if (_find_theme_item(p_theme_owner, p_theme_owner_window, icon, &Theme::get_icon, &Theme::has_icon, p_name, p_type)) {
+ if (_find_theme_item(p_theme_owner, p_theme_owner_window, icon, &Theme::get_icon, &Theme::has_icon, p_name, p_node_type)) {
return icon;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_icon(p_name, p_type)) {
- return Theme::get_project_default()->get_icon(p_name, p_type);
+ if (Theme::get_project_default()->has_icon(p_name, p_node_type)) {
+ return Theme::get_project_default()->get_icon(p_name, p_node_type);
}
}
- return Theme::get_default()->get_icon(p_name, p_type);
+ return Theme::get_default()->get_icon(p_name, p_node_type);
}
-Ref<Shader> Control::get_theme_shader(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+Ref<Shader> Control::get_theme_shader(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
const Ref<Shader> *sdr = data.shader_override.getptr(p_name);
if (sdr) {
return *sdr;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return get_shaders(data.theme_owner, data.theme_owner_window, p_name, type);
}
-Ref<Shader> Control::get_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
+Ref<Shader> Control::get_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
Ref<Shader> shader;
- if (_find_theme_item(p_theme_owner, p_theme_owner_window, shader, &Theme::get_shader, &Theme::has_shader, p_name, p_type)) {
+ if (_find_theme_item(p_theme_owner, p_theme_owner_window, shader, &Theme::get_shader, &Theme::has_shader, p_name, p_node_type)) {
return shader;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_shader(p_name, p_type)) {
- return Theme::get_project_default()->get_shader(p_name, p_type);
+ if (Theme::get_project_default()->has_shader(p_name, p_node_type)) {
+ return Theme::get_project_default()->get_shader(p_name, p_node_type);
}
}
- return Theme::get_default()->get_shader(p_name, p_type);
+ return Theme::get_default()->get_shader(p_name, p_node_type);
}
-Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
const Ref<StyleBox> *style = data.style_override.getptr(p_name);
if (style) {
return *style;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return get_styleboxs(data.theme_owner, data.theme_owner_window, p_name, type);
}
-Ref<StyleBox> Control::get_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
+Ref<StyleBox> Control::get_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
Ref<StyleBox> stylebox;
- if (_find_theme_item(p_theme_owner, p_theme_owner_window, stylebox, &Theme::get_stylebox, &Theme::has_stylebox, p_name, p_type)) {
+ if (_find_theme_item(p_theme_owner, p_theme_owner_window, stylebox, &Theme::get_stylebox, &Theme::has_stylebox, p_name, p_node_type)) {
return stylebox;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_stylebox(p_name, p_type)) {
- return Theme::get_project_default()->get_stylebox(p_name, p_type);
+ if (Theme::get_project_default()->has_stylebox(p_name, p_node_type)) {
+ return Theme::get_project_default()->get_stylebox(p_name, p_node_type);
}
}
- return Theme::get_default()->get_stylebox(p_name, p_type);
+ return Theme::get_default()->get_stylebox(p_name, p_node_type);
}
-Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
const Ref<Font> *font = data.font_override.getptr(p_name);
if (font) {
return *font;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return get_fonts(data.theme_owner, data.theme_owner_window, p_name, type);
}
-Ref<Font> Control::get_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
+Ref<Font> Control::get_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
Ref<Font> font;
- if (_find_theme_item(p_theme_owner, p_theme_owner_window, font, &Theme::get_font, &Theme::has_font, p_name, p_type)) {
+ if (_find_theme_item(p_theme_owner, p_theme_owner_window, font, &Theme::get_font, &Theme::has_font, p_name, p_node_type)) {
return font;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_font(p_name, p_type)) {
- return Theme::get_project_default()->get_font(p_name, p_type);
+ if (Theme::get_project_default()->has_font(p_name, p_node_type)) {
+ return Theme::get_project_default()->get_font(p_name, p_node_type);
}
}
- return Theme::get_default()->get_font(p_name, p_type);
+ return Theme::get_default()->get_font(p_name, p_node_type);
}
-Color Control::get_theme_color(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+Color Control::get_theme_color(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
const Color *color = data.color_override.getptr(p_name);
if (color) {
return *color;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return get_colors(data.theme_owner, data.theme_owner_window, p_name, type);
}
-Color Control::get_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
+Color Control::get_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
Color color;
- if (_find_theme_item(p_theme_owner, p_theme_owner_window, color, &Theme::get_color, &Theme::has_color, p_name, p_type)) {
+ if (_find_theme_item(p_theme_owner, p_theme_owner_window, color, &Theme::get_color, &Theme::has_color, p_name, p_node_type)) {
return color;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_color(p_name, p_type)) {
- return Theme::get_project_default()->get_color(p_name, p_type);
+ if (Theme::get_project_default()->has_color(p_name, p_node_type)) {
+ return Theme::get_project_default()->get_color(p_name, p_node_type);
}
}
- return Theme::get_default()->get_color(p_name, p_type);
+ return Theme::get_default()->get_color(p_name, p_node_type);
}
-int Control::get_theme_constant(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+int Control::get_theme_constant(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
const int *constant = data.constant_override.getptr(p_name);
if (constant) {
return *constant;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return get_constants(data.theme_owner, data.theme_owner_window, p_name, type);
}
-int Control::get_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
+int Control::get_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
int constant;
- if (_find_theme_item(p_theme_owner, p_theme_owner_window, constant, &Theme::get_constant, &Theme::has_constant, p_name, p_type)) {
+ if (_find_theme_item(p_theme_owner, p_theme_owner_window, constant, &Theme::get_constant, &Theme::has_constant, p_name, p_node_type)) {
return constant;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_constant(p_name, p_type)) {
- return Theme::get_project_default()->get_constant(p_name, p_type);
+ if (Theme::get_project_default()->has_constant(p_name, p_node_type)) {
+ return Theme::get_project_default()->get_constant(p_name, p_node_type);
}
}
- return Theme::get_default()->get_constant(p_name, p_type);
+ return Theme::get_default()->get_constant(p_name, p_node_type);
}
bool Control::has_theme_icon_override(const StringName &p_name) const {
@@ -1014,154 +1013,154 @@ bool Control::has_theme_constant_override(const StringName &p_name) const {
return constant != nullptr;
}
-bool Control::has_theme_icon(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+bool Control::has_theme_icon(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
if (has_theme_icon_override(p_name)) {
return true;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return has_icons(data.theme_owner, data.theme_owner_window, p_name, type);
}
-bool Control::has_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
- if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_icon, p_name, p_type)) {
+bool Control::has_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
+ if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_icon, p_name, p_node_type)) {
return true;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_color(p_name, p_type)) {
+ if (Theme::get_project_default()->has_color(p_name, p_node_type)) {
return true;
}
}
- return Theme::get_default()->has_icon(p_name, p_type);
+ return Theme::get_default()->has_icon(p_name, p_node_type);
}
-bool Control::has_theme_shader(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+bool Control::has_theme_shader(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
if (has_theme_shader_override(p_name)) {
return true;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return has_shaders(data.theme_owner, data.theme_owner_window, p_name, type);
}
-bool Control::has_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
- if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_shader, p_name, p_type)) {
+bool Control::has_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
+ if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_shader, p_name, p_node_type)) {
return true;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_shader(p_name, p_type)) {
+ if (Theme::get_project_default()->has_shader(p_name, p_node_type)) {
return true;
}
}
- return Theme::get_default()->has_shader(p_name, p_type);
+ return Theme::get_default()->has_shader(p_name, p_node_type);
}
-bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
if (has_theme_stylebox_override(p_name)) {
return true;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return has_styleboxs(data.theme_owner, data.theme_owner_window, p_name, type);
}
-bool Control::has_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
- if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_stylebox, p_name, p_type)) {
+bool Control::has_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
+ if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_stylebox, p_name, p_node_type)) {
return true;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_stylebox(p_name, p_type)) {
+ if (Theme::get_project_default()->has_stylebox(p_name, p_node_type)) {
return true;
}
}
- return Theme::get_default()->has_stylebox(p_name, p_type);
+ return Theme::get_default()->has_stylebox(p_name, p_node_type);
}
-bool Control::has_theme_font(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+bool Control::has_theme_font(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
if (has_theme_font_override(p_name)) {
return true;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return has_fonts(data.theme_owner, data.theme_owner_window, p_name, type);
}
-bool Control::has_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
- if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_font, p_name, p_type)) {
+bool Control::has_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
+ if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_font, p_name, p_node_type)) {
return true;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_font(p_name, p_type)) {
+ if (Theme::get_project_default()->has_font(p_name, p_node_type)) {
return true;
}
}
- return Theme::get_default()->has_font(p_name, p_type);
+ return Theme::get_default()->has_font(p_name, p_node_type);
}
-bool Control::has_theme_color(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+bool Control::has_theme_color(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
if (has_theme_color_override(p_name)) {
return true;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
return has_colors(data.theme_owner, data.theme_owner_window, p_name, type);
}
-bool Control::has_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
- if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_color, p_name, p_type)) {
+bool Control::has_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
+ if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_color, p_name, p_node_type)) {
return true;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_color(p_name, p_type)) {
+ if (Theme::get_project_default()->has_color(p_name, p_node_type)) {
return true;
}
}
- return Theme::get_default()->has_color(p_name, p_type);
+ return Theme::get_default()->has_color(p_name, p_node_type);
}
-bool Control::has_theme_constant(const StringName &p_name, const StringName &p_type) const {
- if (p_type == StringName() || p_type == get_class_name()) {
+bool Control::has_theme_constant(const StringName &p_name, const StringName &p_node_type) const {
+ if (p_node_type == StringName() || p_node_type == get_class_name()) {
if (has_theme_constant_override(p_name)) {
return true;
}
}
- StringName type = p_type ? p_type : get_class_name();
+ StringName type = p_node_type ? p_node_type : get_class_name();
- return has_constants(data.theme_owner, data.theme_owner_window, p_name, p_type);
+ return has_constants(data.theme_owner, data.theme_owner_window, p_name, p_node_type);
}
-bool Control::has_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type) {
- if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_constant, p_name, p_type)) {
+bool Control::has_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type) {
+ if (_has_theme_item(p_theme_owner, p_theme_owner_window, &Theme::has_constant, p_name, p_node_type)) {
return true;
}
if (Theme::get_project_default().is_valid()) {
- if (Theme::get_project_default()->has_constant(p_name, p_type)) {
+ if (Theme::get_project_default()->has_constant(p_name, p_node_type)) {
return true;
}
}
- return Theme::get_default()->has_constant(p_name, p_type);
+ return Theme::get_default()->has_constant(p_name, p_node_type);
}
Rect2 Control::get_parent_anchorable_rect() const {
diff --git a/scene/gui/control.h b/scene/gui/control.h
index f2f558cf4f..85b3227884 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -49,7 +49,6 @@ class Control : public CanvasItem {
public:
enum Anchor {
-
ANCHOR_BEGIN = 0,
ANCHOR_END = 1
};
@@ -67,7 +66,6 @@ public:
};
enum SizeFlags {
-
SIZE_FILL = 1,
SIZE_EXPAND = 2,
SIZE_EXPAND_FILL = SIZE_EXPAND | SIZE_FILL,
@@ -236,23 +234,23 @@ private:
static void _propagate_theme_changed(Node *p_at, Control *p_owner, Window *p_owner_window, bool p_assign = true);
template <class T>
- _FORCE_INLINE_ static bool _find_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, T &, T (Theme::*get_func)(const StringName &, const StringName &) const, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_type);
+ _FORCE_INLINE_ static bool _find_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, T &, T (Theme::*get_func)(const StringName &, const StringName &) const, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_node_type);
- _FORCE_INLINE_ static bool _has_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_type);
+ _FORCE_INLINE_ static bool _has_theme_item(Control *p_theme_owner, Window *p_theme_owner_window, bool (Theme::*has_func)(const StringName &, const StringName &) const, const StringName &p_name, const StringName &p_node_type);
- static Ref<Texture2D> get_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static Ref<Shader> get_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static Ref<StyleBox> get_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static Ref<Font> get_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static Color get_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static int get_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
+ static Ref<Texture2D> get_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static Ref<Shader> get_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static Ref<StyleBox> get_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static Ref<Font> get_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static Color get_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static int get_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
- static bool has_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static bool has_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static bool has_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static bool has_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static bool has_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
- static bool has_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_type = StringName());
+ static bool has_icons(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static bool has_shaders(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static bool has_styleboxs(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static bool has_fonts(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static bool has_colors(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
+ static bool has_constants(Control *p_theme_owner, Window *p_theme_owner_window, const StringName &p_name, const StringName &p_node_type = StringName());
protected:
virtual void add_child_notify(Node *p_child) override;
@@ -272,7 +270,6 @@ protected:
public:
enum {
-
/* NOTIFICATION_DRAW=30,
NOTIFICATION_VISIBILITY_CHANGED=38*/
NOTIFICATION_RESIZED = 40,
@@ -429,12 +426,12 @@ public:
void add_theme_color_override(const StringName &p_name, const Color &p_color);
void add_theme_constant_override(const StringName &p_name, int p_constant);
- Ref<Texture2D> get_theme_icon(const StringName &p_name, const StringName &p_type = StringName()) const;
- Ref<Shader> get_theme_shader(const StringName &p_name, const StringName &p_type = StringName()) const;
- Ref<StyleBox> get_theme_stylebox(const StringName &p_name, const StringName &p_type = StringName()) const;
- Ref<Font> get_theme_font(const StringName &p_name, const StringName &p_type = StringName()) const;
- Color get_theme_color(const StringName &p_name, const StringName &p_type = StringName()) const;
- int get_theme_constant(const StringName &p_name, const StringName &p_type = StringName()) const;
+ Ref<Texture2D> get_theme_icon(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ Ref<Shader> get_theme_shader(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ Ref<StyleBox> get_theme_stylebox(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ Ref<Font> get_theme_font(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ Color get_theme_color(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ int get_theme_constant(const StringName &p_name, const StringName &p_node_type = StringName()) const;
bool has_theme_icon_override(const StringName &p_name) const;
bool has_theme_shader_override(const StringName &p_name) const;
@@ -443,12 +440,12 @@ public:
bool has_theme_color_override(const StringName &p_name) const;
bool has_theme_constant_override(const StringName &p_name) const;
- bool has_theme_icon(const StringName &p_name, const StringName &p_type = StringName()) const;
- bool has_theme_shader(const StringName &p_name, const StringName &p_type = StringName()) const;
- bool has_theme_stylebox(const StringName &p_name, const StringName &p_type = StringName()) const;
- bool has_theme_font(const StringName &p_name, const StringName &p_type = StringName()) const;
- bool has_theme_color(const StringName &p_name, const StringName &p_type = StringName()) const;
- bool has_theme_constant(const StringName &p_name, const StringName &p_type = StringName()) const;
+ bool has_theme_icon(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ bool has_theme_shader(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ bool has_theme_stylebox(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ bool has_theme_font(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ bool has_theme_color(const StringName &p_name, const StringName &p_node_type = StringName()) const;
+ bool has_theme_constant(const StringName &p_name, const StringName &p_node_type = StringName()) const;
/* TOOLTIP */
diff --git a/scene/gui/label.h b/scene/gui/label.h
index 510a716f5d..df78a1b34c 100644
--- a/scene/gui/label.h
+++ b/scene/gui/label.h
@@ -38,7 +38,6 @@ class Label : public Control {
public:
enum Align {
-
ALIGN_LEFT,
ALIGN_CENTER,
ALIGN_RIGHT,
@@ -46,7 +45,6 @@ public:
};
enum VAlign {
-
VALIGN_TOP,
VALIGN_CENTER,
VALIGN_BOTTOM,
diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h
index a5e5b6988f..5fceedbf26 100644
--- a/scene/gui/line_edit.h
+++ b/scene/gui/line_edit.h
@@ -39,7 +39,6 @@ class LineEdit : public Control {
public:
enum Align {
-
ALIGN_LEFT,
ALIGN_CENTER,
ALIGN_RIGHT,
diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp
index 49ddd5c3ee..791c78e2b4 100644
--- a/scene/gui/popup.cpp
+++ b/scene/gui/popup.cpp
@@ -93,7 +93,7 @@ void Popup::_notification(int p_what) {
}
void Popup::_parent_focused() {
- if (popped_up) {
+ if (popped_up && close_on_parent_focus) {
_close_pressed();
}
}
@@ -112,7 +112,19 @@ void Popup::set_as_minsize() {
set_size(get_contents_minimum_size());
}
+void Popup::set_close_on_parent_focus(bool p_close) {
+ close_on_parent_focus = p_close;
+}
+
+bool Popup::get_close_on_parent_focus() {
+ return close_on_parent_focus;
+}
+
void Popup::_bind_methods() {
+ ClassDB::bind_method(D_METHOD("set_close_on_parent_focus", "close"), &Popup::set_close_on_parent_focus);
+ ClassDB::bind_method(D_METHOD("get_close_on_parent_focus"), &Popup::get_close_on_parent_focus);
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "close_on_parent_focus"), "set_close_on_parent_focus", "get_close_on_parent_focus");
+
ADD_SIGNAL(MethodInfo("popup_hide"));
}
diff --git a/scene/gui/popup.h b/scene/gui/popup.h
index 44577811ff..48e7ea9452 100644
--- a/scene/gui/popup.h
+++ b/scene/gui/popup.h
@@ -40,6 +40,7 @@ class Popup : public Window {
LocalVector<Window *> visible_parents;
bool popped_up = false;
+ bool close_on_parent_focus = true;
void _input_from_window(const Ref<InputEvent> &p_event);
@@ -57,6 +58,10 @@ protected:
public:
void set_as_minsize();
+
+ void set_close_on_parent_focus(bool p_close);
+ bool get_close_on_parent_focus();
+
Popup();
~Popup();
};
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index 0a469d8373..7baf32173f 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -173,11 +173,11 @@ int PopupMenu::_get_mouse_over(const Point2 &p_over) const {
return -1;
}
-void PopupMenu::_activate_submenu(int over) {
- Node *n = get_node(items[over].submenu);
- ERR_FAIL_COND_MSG(!n, "Item subnode does not exist: " + items[over].submenu + ".");
+void PopupMenu::_activate_submenu(int p_over) {
+ Node *n = get_node(items[p_over].submenu);
+ ERR_FAIL_COND_MSG(!n, "Item subnode does not exist: " + items[p_over].submenu + ".");
Popup *submenu_popup = Object::cast_to<Popup>(n);
- ERR_FAIL_COND_MSG(!submenu_popup, "Item subnode is not a Popup: " + items[over].submenu + ".");
+ ERR_FAIL_COND_MSG(!submenu_popup, "Item subnode is not a Popup: " + items[p_over].submenu + ".");
if (submenu_popup->is_visible()) {
return; //already visible!
}
@@ -190,7 +190,7 @@ void PopupMenu::_activate_submenu(int over) {
float scroll_offset = control->get_position().y;
- Point2 submenu_pos = this_pos + Point2(this_rect.size.width, items[over]._ofs_cache + scroll_offset);
+ Point2 submenu_pos = this_pos + Point2(this_rect.size.width, items[p_over]._ofs_cache + scroll_offset);
Size2 submenu_size = submenu_popup->get_size();
// Fix pos if going outside parent rect
@@ -198,6 +198,7 @@ void PopupMenu::_activate_submenu(int over) {
submenu_pos.x = this_pos.x - submenu_size.width;
}
+ submenu_popup->set_close_on_parent_focus(false);
submenu_popup->set_position(submenu_pos);
submenu_popup->set_as_minsize(); // Shrink the popup size to it's contents.
submenu_popup->popup();
@@ -210,11 +211,11 @@ void PopupMenu::_activate_submenu(int over) {
// Autohide area above the submenu item
submenu_pum->clear_autohide_areas();
- submenu_pum->add_autohide_area(Rect2(this_rect.position.x, this_rect.position.y, this_rect.size.x, items[over]._ofs_cache + scroll_offset + style->get_offset().height - vsep / 2));
+ submenu_pum->add_autohide_area(Rect2(this_rect.position.x, this_rect.position.y, this_rect.size.x, items[p_over]._ofs_cache + scroll_offset + style->get_offset().height - vsep / 2));
// If there is an area below the submenu item, add an autohide area there.
- if (items[over]._ofs_cache + items[over]._height_cache + scroll_offset <= control->get_size().height) {
- int from = items[over]._ofs_cache + items[over]._height_cache + scroll_offset + vsep / 2 + style->get_offset().height;
+ if (items[p_over]._ofs_cache + items[p_over]._height_cache + scroll_offset <= control->get_size().height) {
+ int from = items[p_over]._ofs_cache + items[p_over]._height_cache + scroll_offset + vsep / 2 + style->get_offset().height;
submenu_pum->add_autohide_area(Rect2(this_rect.position.x, this_rect.position.y + from, this_rect.size.x, this_rect.size.y - from));
}
}
@@ -547,6 +548,31 @@ void PopupMenu::_draw_background() {
style->draw(ci2, Rect2(Point2(), margin_container->get_size()));
}
+void PopupMenu::_minimum_lifetime_timeout() {
+ close_allowed = true;
+ // If the mouse still isn't in this popup after timer expires, close.
+ if (!get_visible_rect().has_point(get_mouse_position())) {
+ _close_pressed();
+ }
+}
+
+void PopupMenu::_close_pressed() {
+ // Only apply minimum lifetime to submenus.
+ PopupMenu *parent_pum = Object::cast_to<PopupMenu>(get_parent());
+ if (!parent_pum) {
+ Popup::_close_pressed();
+ return;
+ }
+
+ // If the timer has expired, close. If timer is still running, do nothing.
+ if (close_allowed) {
+ close_allowed = false;
+ Popup::_close_pressed();
+ } else if (minimum_lifetime_timer->is_stopped()) {
+ minimum_lifetime_timer->start();
+ }
+}
+
void PopupMenu::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
@@ -566,7 +592,7 @@ void PopupMenu::_notification(int p_what) {
control->update();
} break;
case NOTIFICATION_WM_MOUSE_ENTER: {
- //grab_focus();
+ grab_focus();
} break;
case NOTIFICATION_WM_MOUSE_EXIT: {
if (mouse_over >= 0 && (items[mouse_over].submenu == "" || submenu_over != -1)) {
@@ -1484,6 +1510,12 @@ PopupMenu::PopupMenu() {
submenu_timer->set_one_shot(true);
submenu_timer->connect("timeout", callable_mp(this, &PopupMenu::_submenu_timeout));
add_child(submenu_timer);
+
+ minimum_lifetime_timer = memnew(Timer);
+ minimum_lifetime_timer->set_wait_time(0.3);
+ minimum_lifetime_timer->set_one_shot(true);
+ minimum_lifetime_timer->connect("timeout", callable_mp(this, &PopupMenu::_minimum_lifetime_timeout));
+ add_child(minimum_lifetime_timer);
}
PopupMenu::~PopupMenu() {
diff --git a/scene/gui/popup_menu.h b/scene/gui/popup_menu.h
index e8f82ba869..a2e7d7e6cd 100644
--- a/scene/gui/popup_menu.h
+++ b/scene/gui/popup_menu.h
@@ -86,6 +86,9 @@ class PopupMenu : public Popup {
}
};
+ bool close_allowed = false;
+
+ Timer *minimum_lifetime_timer = nullptr;
Timer *submenu_timer;
List<Rect2> autohide_areas;
Vector<Item> items;
@@ -102,7 +105,7 @@ class PopupMenu : public Popup {
void _scroll_to_item(int p_item);
void _gui_input(const Ref<InputEvent> &p_event);
- void _activate_submenu(int over);
+ void _activate_submenu(int p_over);
void _submenu_timeout();
uint64_t popup_time_msec = 0;
@@ -130,6 +133,9 @@ class PopupMenu : public Popup {
void _draw_items();
void _draw_background();
+ void _minimum_lifetime_timeout();
+ void _close_pressed();
+
protected:
friend class MenuButton;
void _notification(int p_what);
diff --git a/scene/gui/rich_text_label.h b/scene/gui/rich_text_label.h
index c5ed1cb3ef..67a3f466a6 100644
--- a/scene/gui/rich_text_label.h
+++ b/scene/gui/rich_text_label.h
@@ -39,7 +39,6 @@ class RichTextLabel : public Control {
public:
enum Align {
-
ALIGN_LEFT,
ALIGN_CENTER,
ALIGN_RIGHT,
@@ -47,14 +46,12 @@ public:
};
enum ListType {
-
LIST_NUMBERS,
LIST_LETTERS,
LIST_DOTS
};
enum ItemType {
-
ITEM_FRAME,
ITEM_TEXT,
ITEM_IMAGE,
@@ -344,7 +341,6 @@ private:
};
enum ProcessMode {
-
PROCESS_CACHE,
PROCESS_DRAW,
PROCESS_POINTER
diff --git a/scene/gui/tab_container.h b/scene/gui/tab_container.h
index 6ac07b5845..f82f594875 100644
--- a/scene/gui/tab_container.h
+++ b/scene/gui/tab_container.h
@@ -38,7 +38,6 @@ class TabContainer : public Container {
public:
enum TabAlign {
-
ALIGN_LEFT,
ALIGN_CENTER,
ALIGN_RIGHT
diff --git a/scene/gui/tabs.h b/scene/gui/tabs.h
index b94c4a37a1..62142e1cde 100644
--- a/scene/gui/tabs.h
+++ b/scene/gui/tabs.h
@@ -38,7 +38,6 @@ class Tabs : public Control {
public:
enum TabAlign {
-
ALIGN_LEFT,
ALIGN_CENTER,
ALIGN_RIGHT,
@@ -46,7 +45,6 @@ public:
};
enum CloseButtonDisplayPolicy {
-
CLOSE_BUTTON_SHOW_NEVER,
CLOSE_BUTTON_SHOW_ACTIVE_ONLY,
CLOSE_BUTTON_SHOW_ALWAYS,
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index bcb375d786..31030765e0 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -1813,7 +1813,6 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, bool
case TreeItem::CELL_MODE_RANGE: {
if (c.text != "") {
//if (x >= (get_column_width(col)-item_h/2)) {
-
popup_menu->clear();
for (int i = 0; i < c.text.get_slice_count(","); i++) {
String s = c.text.get_slicec(',', i);
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index c0910a8fe0..9554bb4665 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -44,7 +44,6 @@ class TreeItem : public Object {
public:
enum TreeCellMode {
-
CELL_MODE_STRING, ///< just a string
CELL_MODE_CHECK, ///< string + check
CELL_MODE_RANGE, ///< Contains a range
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 36c3f03f70..38baa6c97e 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -2889,7 +2889,6 @@ void Node::_bind_methods() {
ADD_SIGNAL(MethodInfo("tree_exiting"));
ADD_SIGNAL(MethodInfo("tree_exited"));
- ADD_GROUP("Pause", "pause_");
ADD_PROPERTY(PropertyInfo(Variant::INT, "pause_mode", PROPERTY_HINT_ENUM, "Inherit,Stop,Process"), "set_pause_mode", "get_pause_mode");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "name", PROPERTY_HINT_NONE, "", 0), "set_name", "get_name");
diff --git a/scene/main/node.h b/scene/main/node.h
index 2f8a0673e9..61740738b0 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -47,14 +47,12 @@ class Node : public Object {
public:
enum PauseMode {
-
PAUSE_MODE_INHERIT,
PAUSE_MODE_STOP,
PAUSE_MODE_PROCESS
};
enum DuplicateFlags {
-
DUPLICATE_SIGNALS = 1,
DUPLICATE_GROUPS = 2,
DUPLICATE_SCRIPTS = 4,
@@ -218,7 +216,6 @@ protected:
public:
enum {
-
// you can make your own, but don't use the same numbers as other notifications in other nodes
NOTIFICATION_ENTER_TREE = 10,
NOTIFICATION_EXIT_TREE = 11,
diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp
index cffd1126ee..cc5f4e9598 100644
--- a/scene/main/scene_tree.cpp
+++ b/scene/main/scene_tree.cpp
@@ -827,12 +827,9 @@ void SceneTree::_notify_group_pause(const StringName &p_group, int p_notificatio
/*
void SceneMainLoop::_update_listener_2d() {
-
if (listener_2d.is_valid()) {
-
SpatialSound2DServer::get_singleton()->listener_set_space( listener_2d, world_2d->get_sound_space() );
}
-
}
*/
diff --git a/scene/main/timer.cpp b/scene/main/timer.cpp
index c9fce2f6c2..1c6037d26e 100644
--- a/scene/main/timer.cpp
+++ b/scene/main/timer.cpp
@@ -46,7 +46,7 @@ void Timer::_notification(int p_what) {
}
} break;
case NOTIFICATION_INTERNAL_PROCESS: {
- if (timer_process_mode == TIMER_PROCESS_PHYSICS || !is_processing_internal()) {
+ if (!processing || timer_process_mode == TIMER_PROCESS_PHYSICS || !is_processing_internal()) {
return;
}
time_left -= get_process_delta_time();
@@ -63,7 +63,7 @@ void Timer::_notification(int p_what) {
} break;
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
- if (timer_process_mode == TIMER_PROCESS_IDLE || !is_physics_processing_internal()) {
+ if (!processing || timer_process_mode == TIMER_PROCESS_IDLE || !is_physics_processing_internal()) {
return;
}
time_left -= get_physics_process_delta_time();
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 17411bb490..f4498507f1 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -2378,7 +2378,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
//keyboard focus
//if (from && p_event->is_pressed() && !p_event->get_alt() && !p_event->get_metakey() && !p_event->key->get_command()) {
-
Ref<InputEventKey> k = p_event;
//need to check for mods, otherwise any combination of alt/ctrl/shift+<up/down/left/righ/etc> is handled here when it shouldn't be.
bool mods = k.is_valid() && (k->get_control() || k->get_alt() || k->get_shift() || k->get_metakey());
@@ -3135,7 +3134,6 @@ Variant Viewport::gui_get_drag_data() const {
String Viewport::get_configuration_warning() const {
/*if (get_parent() && !Object::cast_to<Control>(get_parent()) && !render_target) {
-
return TTR("This viewport is not set as render target. If you intend for it to display its contents directly to the screen, make it a child of a Control so it can obtain a size. Otherwise, make it a RenderTarget and assign its internal texture to some node for display.");
}*/
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 8e7f2cecdc..4be66ae79f 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -598,7 +598,6 @@ class SubViewport : public Viewport {
public:
enum ClearMode {
-
CLEAR_MODE_ALWAYS,
CLEAR_MODE_NEVER,
CLEAR_MODE_ONLY_NEXT_FRAME
diff --git a/scene/main/window.h b/scene/main/window.h
index 09c52b30a3..e11cbd8a72 100644
--- a/scene/main/window.h
+++ b/scene/main/window.h
@@ -147,7 +147,6 @@ protected:
public:
enum {
-
NOTIFICATION_VISIBILITY_CHANGED = 30,
NOTIFICATION_POST_POPUP = 31,
NOTIFICATION_THEME_CHANGED = 32,
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index 92103f3b1d..b2aad97d3b 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -721,7 +721,6 @@ bool Animation::track_get_interpolation_loop_wrap(int p_track) const {
/*
template<class T>
int Animation::_insert_pos(float p_time, T& p_keys) {
-
// simple, linear time inset that should be fast enough in reality.
int idx=p_keys.size();
@@ -734,14 +733,12 @@ int Animation::_insert_pos(float p_time, T& p_keys) {
p_keys.insert(idx,T());
return idx;
} else if (p_keys[idx-1].time == p_time) {
-
// condition for replacing.
return idx-1;
}
idx--;
}
-
}
*/
diff --git a/scene/resources/audio_stream_sample.cpp b/scene/resources/audio_stream_sample.cpp
index f02e7987a9..600a859894 100644
--- a/scene/resources/audio_stream_sample.cpp
+++ b/scene/resources/audio_stream_sample.cpp
@@ -261,7 +261,8 @@ void AudioStreamPlaybackSample::mix(AudioFrame *p_buffer, float p_rate_scale, in
sign = -1;
}
- float base_rate = AudioServer::get_singleton()->get_mix_rate();
+ float global_rate_scale = AudioServer::get_singleton()->get_global_rate_scale();
+ float base_rate = AudioServer::get_singleton()->get_mix_rate() * global_rate_scale;
float srate = base->mix_rate;
srate *= p_rate_scale;
float fincrement = srate / base_rate;
diff --git a/scene/resources/capsule_shape_3d.cpp b/scene/resources/capsule_shape_3d.cpp
index 9d1355eec6..5da7f682e5 100644
--- a/scene/resources/capsule_shape_3d.cpp
+++ b/scene/resources/capsule_shape_3d.cpp
@@ -106,8 +106,8 @@ void CapsuleShape3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_height", "height"), &CapsuleShape3D::set_height);
ClassDB::bind_method(D_METHOD("get_height"), &CapsuleShape3D::get_height);
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.01,4096,0.01"), "set_radius", "get_radius");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_RANGE, "0.01,4096,0.01"), "set_height", "get_height");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.001,4096,0.001"), "set_radius", "get_radius");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_RANGE, "0.001,4096,0.001"), "set_height", "get_height");
}
CapsuleShape3D::CapsuleShape3D() :
diff --git a/scene/resources/cylinder_shape_3d.cpp b/scene/resources/cylinder_shape_3d.cpp
index ad64541247..bb8c27a60d 100644
--- a/scene/resources/cylinder_shape_3d.cpp
+++ b/scene/resources/cylinder_shape_3d.cpp
@@ -99,8 +99,8 @@ void CylinderShape3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_height", "height"), &CylinderShape3D::set_height);
ClassDB::bind_method(D_METHOD("get_height"), &CylinderShape3D::get_height);
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.01,4096,0.01"), "set_radius", "get_radius");
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_RANGE, "0.01,4096,0.01"), "set_height", "get_height");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0.001,4096,0.001"), "set_radius", "get_radius");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "height", PROPERTY_HINT_RANGE, "0.001,4096,0.001"), "set_height", "get_height");
}
CylinderShape3D::CylinderShape3D() :
diff --git a/scene/resources/mesh.cpp b/scene/resources/mesh.cpp
index 060846d5b6..97c0c7a81d 100644
--- a/scene/resources/mesh.cpp
+++ b/scene/resources/mesh.cpp
@@ -168,7 +168,6 @@ Vector<Face3> Mesh::get_faces() const {
return Vector<Face3>();
/*
for (int i=0;i<surfaces.size();i++) {
-
if (RenderingServer::get_singleton()->mesh_surface_get_primitive_type( mesh, i ) != RenderingServer::PRIMITIVE_TRIANGLES )
continue;
@@ -181,12 +180,10 @@ Vector<Face3> Mesh::get_faces() const {
bool has_indices;
if (len>0) {
-
indices=RenderingServer::get_singleton()->mesh_surface_get_array(mesh, i,RenderingServer::ARRAY_INDEX);
has_indices=true;
} else {
-
len=vertices.size();
has_indices=false;
}
@@ -210,11 +207,9 @@ Vector<Face3> Mesh::get_faces() const {
for (int i=0;i<len/3;i++) {
-
Face3 face;
for (int j=0;j<3;j++) {
-
int idx=i*3+j;
face.vertex[j] = has_indices ? verticesptr[ indicesptr[ idx ] ] : verticesptr[idx];
}
diff --git a/scene/resources/mesh.h b/scene/resources/mesh.h
index 81c18eea2d..642ae7e1b0 100644
--- a/scene/resources/mesh.h
+++ b/scene/resources/mesh.h
@@ -50,13 +50,11 @@ protected:
public:
enum {
-
NO_INDEX_ARRAY = RenderingServer::NO_INDEX_ARRAY,
ARRAY_WEIGHTS_SIZE = RenderingServer::ARRAY_WEIGHTS_SIZE
};
enum ArrayType {
-
ARRAY_VERTEX = RenderingServer::ARRAY_VERTEX,
ARRAY_NORMAL = RenderingServer::ARRAY_NORMAL,
ARRAY_TANGENT = RenderingServer::ARRAY_TANGENT,
@@ -107,7 +105,6 @@ public:
};
enum BlendShapeMode {
-
BLEND_SHAPE_MODE_NORMALIZED = RS::BLEND_SHAPE_MODE_NORMALIZED,
BLEND_SHAPE_MODE_RELATIVE = RS::BLEND_SHAPE_MODE_RELATIVE,
};
diff --git a/scene/resources/ray_shape_3d.cpp b/scene/resources/ray_shape_3d.cpp
index 39df4c22f9..1705fb0f55 100644
--- a/scene/resources/ray_shape_3d.cpp
+++ b/scene/resources/ray_shape_3d.cpp
@@ -81,7 +81,7 @@ void RayShape3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_slips_on_slope", "active"), &RayShape3D::set_slips_on_slope);
ClassDB::bind_method(D_METHOD("get_slips_on_slope"), &RayShape3D::get_slips_on_slope);
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_length", "get_length");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "length", PROPERTY_HINT_RANGE, "0,4096,0.001"), "set_length", "get_length");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "slips_on_slope"), "set_slips_on_slope", "get_slips_on_slope");
}
diff --git a/scene/resources/shader.h b/scene/resources/shader.h
index f2ea582ff0..0feaa179b2 100644
--- a/scene/resources/shader.h
+++ b/scene/resources/shader.h
@@ -42,7 +42,6 @@ class Shader : public Resource {
public:
enum Mode {
-
MODE_SPATIAL,
MODE_CANVAS_ITEM,
MODE_PARTICLES,
diff --git a/scene/resources/sphere_shape_3d.cpp b/scene/resources/sphere_shape_3d.cpp
index fd33387df6..64e0a701b7 100644
--- a/scene/resources/sphere_shape_3d.cpp
+++ b/scene/resources/sphere_shape_3d.cpp
@@ -77,7 +77,7 @@ void SphereShape3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_radius", "radius"), &SphereShape3D::set_radius);
ClassDB::bind_method(D_METHOD("get_radius"), &SphereShape3D::get_radius);
- ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0,4096,0.01"), "set_radius", "get_radius");
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "radius", PROPERTY_HINT_RANGE, "0,4096,0.001"), "set_radius", "get_radius");
}
SphereShape3D::SphereShape3D() :
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index 07de202cc8..1507537cd0 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -151,7 +151,7 @@ void ImageTexture::_reload_hook(const RID &p_hook) {
}
void ImageTexture::create_from_image(const Ref<Image> &p_image) {
- ERR_FAIL_COND(p_image.is_null());
+ ERR_FAIL_COND_MSG(p_image.is_null(), "Invalid image");
w = p_image->get_width();
h = p_image->get_height();
format = p_image->get_format();
@@ -174,11 +174,14 @@ Image::Format ImageTexture::get_format() const {
}
void ImageTexture::update(const Ref<Image> &p_image, bool p_immediate) {
- ERR_FAIL_COND(p_image.is_null());
- ERR_FAIL_COND(texture.is_null());
- ERR_FAIL_COND(p_image->get_width() != w || p_image->get_height() != h);
- ERR_FAIL_COND(p_image->get_format() != format);
- ERR_FAIL_COND(mipmaps != p_image->has_mipmaps());
+ ERR_FAIL_COND_MSG(p_image.is_null(), "Invalid image");
+ ERR_FAIL_COND_MSG(texture.is_null(), "Texture is not initialized.");
+ ERR_FAIL_COND_MSG(p_image->get_width() != w || p_image->get_height() != h,
+ "The new image dimensions must match the texture size.");
+ ERR_FAIL_COND_MSG(p_image->get_format() != format,
+ "The new image format must match the texture's image format.");
+ ERR_FAIL_COND_MSG(mipmaps != p_image->has_mipmaps(),
+ "The new image mipmaps configuration must match the texture's image mipmaps configuration");
if (p_immediate) {
RenderingServer::get_singleton()->texture_2d_update_immediate(texture, p_image);
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index 3bc1ca8463..a8d8b785fa 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -664,7 +664,6 @@ public:
};
/*
enum CubeMapSide {
-
CUBEMAP_LEFT,
CUBEMAP_RIGHT,
CUBEMAP_BOTTOM,
diff --git a/scene/resources/theme.cpp b/scene/resources/theme.cpp
index a05abbb4c0..ccff49829e 100644
--- a/scene/resources/theme.cpp
+++ b/scene/resources/theme.cpp
@@ -36,11 +36,11 @@ void Theme::_emit_theme_changed() {
emit_changed();
}
-Vector<String> Theme::_get_icon_list(const String &p_type) const {
+Vector<String> Theme::_get_icon_list(const String &p_node_type) const {
Vector<String> ilret;
List<StringName> il;
- get_icon_list(p_type, &il);
+ get_icon_list(p_node_type, &il);
ilret.resize(il.size());
int i = 0;
@@ -51,11 +51,11 @@ Vector<String> Theme::_get_icon_list(const String &p_type) const {
return ilret;
}
-Vector<String> Theme::_get_stylebox_list(const String &p_type) const {
+Vector<String> Theme::_get_stylebox_list(const String &p_node_type) const {
Vector<String> ilret;
List<StringName> il;
- get_stylebox_list(p_type, &il);
+ get_stylebox_list(p_node_type, &il);
ilret.resize(il.size());
int i = 0;
@@ -81,11 +81,11 @@ Vector<String> Theme::_get_stylebox_types() const {
return ilret;
}
-Vector<String> Theme::_get_font_list(const String &p_type) const {
+Vector<String> Theme::_get_font_list(const String &p_node_type) const {
Vector<String> ilret;
List<StringName> il;
- get_font_list(p_type, &il);
+ get_font_list(p_node_type, &il);
ilret.resize(il.size());
int i = 0;
@@ -96,11 +96,11 @@ Vector<String> Theme::_get_font_list(const String &p_type) const {
return ilret;
}
-Vector<String> Theme::_get_color_list(const String &p_type) const {
+Vector<String> Theme::_get_color_list(const String &p_node_type) const {
Vector<String> ilret;
List<StringName> il;
- get_color_list(p_type, &il);
+ get_color_list(p_node_type, &il);
ilret.resize(il.size());
int i = 0;
@@ -111,11 +111,11 @@ Vector<String> Theme::_get_color_list(const String &p_type) const {
return ilret;
}
-Vector<String> Theme::_get_constant_list(const String &p_type) const {
+Vector<String> Theme::_get_constant_list(const String &p_node_type) const {
Vector<String> ilret;
List<StringName> il;
- get_constant_list(p_type, &il);
+ get_constant_list(p_node_type, &il);
ilret.resize(il.size());
int i = 0;
@@ -126,7 +126,7 @@ Vector<String> Theme::_get_constant_list(const String &p_type) const {
return ilret;
}
-Vector<String> Theme::_get_type_list(const String &p_type) const {
+Vector<String> Theme::_get_type_list(const String &p_node_type) const {
Vector<String> ilret;
List<StringName> il;
@@ -325,19 +325,19 @@ void Theme::set_default_font(const Ref<Font> &p_font) {
default_font = p_font;
}
-void Theme::set_icon(const StringName &p_name, const StringName &p_type, const Ref<Texture2D> &p_icon) {
+void Theme::set_icon(const StringName &p_name, const StringName &p_node_type, const Ref<Texture2D> &p_icon) {
//ERR_FAIL_COND(p_icon.is_null());
- bool new_value = !icon_map.has(p_type) || !icon_map[p_type].has(p_name);
+ bool new_value = !icon_map.has(p_node_type) || !icon_map[p_node_type].has(p_name);
- if (icon_map[p_type].has(p_name) && icon_map[p_type][p_name].is_valid()) {
- icon_map[p_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
+ if (icon_map[p_node_type].has(p_name) && icon_map[p_node_type][p_name].is_valid()) {
+ icon_map[p_node_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
}
- icon_map[p_type][p_name] = p_icon;
+ icon_map[p_node_type][p_name] = p_icon;
if (p_icon.is_valid()) {
- icon_map[p_type][p_name]->connect("changed", callable_mp(this, &Theme::_emit_theme_changed), varray(), CONNECT_REFERENCE_COUNTED);
+ icon_map[p_node_type][p_name]->connect("changed", callable_mp(this, &Theme::_emit_theme_changed), varray(), CONNECT_REFERENCE_COUNTED);
}
if (new_value) {
@@ -346,50 +346,50 @@ void Theme::set_icon(const StringName &p_name, const StringName &p_type, const R
}
}
-Ref<Texture2D> Theme::get_icon(const StringName &p_name, const StringName &p_type) const {
- if (icon_map.has(p_type) && icon_map[p_type].has(p_name) && icon_map[p_type][p_name].is_valid()) {
- return icon_map[p_type][p_name];
+Ref<Texture2D> Theme::get_icon(const StringName &p_name, const StringName &p_node_type) const {
+ if (icon_map.has(p_node_type) && icon_map[p_node_type].has(p_name) && icon_map[p_node_type][p_name].is_valid()) {
+ return icon_map[p_node_type][p_name];
} else {
return default_icon;
}
}
-bool Theme::has_icon(const StringName &p_name, const StringName &p_type) const {
- return (icon_map.has(p_type) && icon_map[p_type].has(p_name) && icon_map[p_type][p_name].is_valid());
+bool Theme::has_icon(const StringName &p_name, const StringName &p_node_type) const {
+ return (icon_map.has(p_node_type) && icon_map[p_node_type].has(p_name) && icon_map[p_node_type][p_name].is_valid());
}
-void Theme::clear_icon(const StringName &p_name, const StringName &p_type) {
- ERR_FAIL_COND(!icon_map.has(p_type));
- ERR_FAIL_COND(!icon_map[p_type].has(p_name));
+void Theme::clear_icon(const StringName &p_name, const StringName &p_node_type) {
+ ERR_FAIL_COND(!icon_map.has(p_node_type));
+ ERR_FAIL_COND(!icon_map[p_node_type].has(p_name));
- if (icon_map[p_type][p_name].is_valid()) {
- icon_map[p_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
+ if (icon_map[p_node_type][p_name].is_valid()) {
+ icon_map[p_node_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
}
- icon_map[p_type].erase(p_name);
+ icon_map[p_node_type].erase(p_name);
_change_notify();
emit_changed();
}
-void Theme::get_icon_list(StringName p_type, List<StringName> *p_list) const {
+void Theme::get_icon_list(StringName p_node_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
- if (!icon_map.has(p_type)) {
+ if (!icon_map.has(p_node_type)) {
return;
}
const StringName *key = nullptr;
- while ((key = icon_map[p_type].next(key))) {
+ while ((key = icon_map[p_node_type].next(key))) {
p_list->push_back(*key);
}
}
-void Theme::set_shader(const StringName &p_name, const StringName &p_type, const Ref<Shader> &p_shader) {
- bool new_value = !shader_map.has(p_type) || !shader_map[p_type].has(p_name);
+void Theme::set_shader(const StringName &p_name, const StringName &p_node_type, const Ref<Shader> &p_shader) {
+ bool new_value = !shader_map.has(p_node_type) || !shader_map[p_node_type].has(p_name);
- shader_map[p_type][p_name] = p_shader;
+ shader_map[p_node_type][p_name] = p_shader;
if (new_value) {
_change_notify();
@@ -397,54 +397,54 @@ void Theme::set_shader(const StringName &p_name, const StringName &p_type, const
}
}
-Ref<Shader> Theme::get_shader(const StringName &p_name, const StringName &p_type) const {
- if (shader_map.has(p_type) && shader_map[p_type].has(p_name) && shader_map[p_type][p_name].is_valid()) {
- return shader_map[p_type][p_name];
+Ref<Shader> Theme::get_shader(const StringName &p_name, const StringName &p_node_type) const {
+ if (shader_map.has(p_node_type) && shader_map[p_node_type].has(p_name) && shader_map[p_node_type][p_name].is_valid()) {
+ return shader_map[p_node_type][p_name];
} else {
return nullptr;
}
}
-bool Theme::has_shader(const StringName &p_name, const StringName &p_type) const {
- return (shader_map.has(p_type) && shader_map[p_type].has(p_name) && shader_map[p_type][p_name].is_valid());
+bool Theme::has_shader(const StringName &p_name, const StringName &p_node_type) const {
+ return (shader_map.has(p_node_type) && shader_map[p_node_type].has(p_name) && shader_map[p_node_type][p_name].is_valid());
}
-void Theme::clear_shader(const StringName &p_name, const StringName &p_type) {
- ERR_FAIL_COND(!shader_map.has(p_type));
- ERR_FAIL_COND(!shader_map[p_type].has(p_name));
+void Theme::clear_shader(const StringName &p_name, const StringName &p_node_type) {
+ ERR_FAIL_COND(!shader_map.has(p_node_type));
+ ERR_FAIL_COND(!shader_map[p_node_type].has(p_name));
- shader_map[p_type].erase(p_name);
+ shader_map[p_node_type].erase(p_name);
_change_notify();
emit_changed();
}
-void Theme::get_shader_list(const StringName &p_type, List<StringName> *p_list) const {
+void Theme::get_shader_list(const StringName &p_node_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
- if (!shader_map.has(p_type)) {
+ if (!shader_map.has(p_node_type)) {
return;
}
const StringName *key = nullptr;
- while ((key = shader_map[p_type].next(key))) {
+ while ((key = shader_map[p_node_type].next(key))) {
p_list->push_back(*key);
}
}
-void Theme::set_stylebox(const StringName &p_name, const StringName &p_type, const Ref<StyleBox> &p_style) {
+void Theme::set_stylebox(const StringName &p_name, const StringName &p_node_type, const Ref<StyleBox> &p_style) {
//ERR_FAIL_COND(p_style.is_null());
- bool new_value = !style_map.has(p_type) || !style_map[p_type].has(p_name);
+ bool new_value = !style_map.has(p_node_type) || !style_map[p_node_type].has(p_name);
- if (style_map[p_type].has(p_name) && style_map[p_type][p_name].is_valid()) {
- style_map[p_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
+ if (style_map[p_node_type].has(p_name) && style_map[p_node_type][p_name].is_valid()) {
+ style_map[p_node_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
}
- style_map[p_type][p_name] = p_style;
+ style_map[p_node_type][p_name] = p_style;
if (p_style.is_valid()) {
- style_map[p_type][p_name]->connect("changed", callable_mp(this, &Theme::_emit_theme_changed), varray(), CONNECT_REFERENCE_COUNTED);
+ style_map[p_node_type][p_name]->connect("changed", callable_mp(this, &Theme::_emit_theme_changed), varray(), CONNECT_REFERENCE_COUNTED);
}
if (new_value) {
@@ -453,42 +453,42 @@ void Theme::set_stylebox(const StringName &p_name, const StringName &p_type, con
emit_changed();
}
-Ref<StyleBox> Theme::get_stylebox(const StringName &p_name, const StringName &p_type) const {
- if (style_map.has(p_type) && style_map[p_type].has(p_name) && style_map[p_type][p_name].is_valid()) {
- return style_map[p_type][p_name];
+Ref<StyleBox> Theme::get_stylebox(const StringName &p_name, const StringName &p_node_type) const {
+ if (style_map.has(p_node_type) && style_map[p_node_type].has(p_name) && style_map[p_node_type][p_name].is_valid()) {
+ return style_map[p_node_type][p_name];
} else {
return default_style;
}
}
-bool Theme::has_stylebox(const StringName &p_name, const StringName &p_type) const {
- return (style_map.has(p_type) && style_map[p_type].has(p_name) && style_map[p_type][p_name].is_valid());
+bool Theme::has_stylebox(const StringName &p_name, const StringName &p_node_type) const {
+ return (style_map.has(p_node_type) && style_map[p_node_type].has(p_name) && style_map[p_node_type][p_name].is_valid());
}
-void Theme::clear_stylebox(const StringName &p_name, const StringName &p_type) {
- ERR_FAIL_COND(!style_map.has(p_type));
- ERR_FAIL_COND(!style_map[p_type].has(p_name));
+void Theme::clear_stylebox(const StringName &p_name, const StringName &p_node_type) {
+ ERR_FAIL_COND(!style_map.has(p_node_type));
+ ERR_FAIL_COND(!style_map[p_node_type].has(p_name));
- if (style_map[p_type][p_name].is_valid()) {
- style_map[p_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
+ if (style_map[p_node_type][p_name].is_valid()) {
+ style_map[p_node_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
}
- style_map[p_type].erase(p_name);
+ style_map[p_node_type].erase(p_name);
_change_notify();
emit_changed();
}
-void Theme::get_stylebox_list(StringName p_type, List<StringName> *p_list) const {
+void Theme::get_stylebox_list(StringName p_node_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
- if (!style_map.has(p_type)) {
+ if (!style_map.has(p_node_type)) {
return;
}
const StringName *key = nullptr;
- while ((key = style_map[p_type].next(key))) {
+ while ((key = style_map[p_node_type].next(key))) {
p_list->push_back(*key);
}
}
@@ -502,19 +502,19 @@ void Theme::get_stylebox_types(List<StringName> *p_list) const {
}
}
-void Theme::set_font(const StringName &p_name, const StringName &p_type, const Ref<Font> &p_font) {
+void Theme::set_font(const StringName &p_name, const StringName &p_node_type, const Ref<Font> &p_font) {
//ERR_FAIL_COND(p_font.is_null());
- bool new_value = !font_map.has(p_type) || !font_map[p_type].has(p_name);
+ bool new_value = !font_map.has(p_node_type) || !font_map[p_node_type].has(p_name);
- if (font_map[p_type][p_name].is_valid()) {
- font_map[p_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
+ if (font_map[p_node_type][p_name].is_valid()) {
+ font_map[p_node_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
}
- font_map[p_type][p_name] = p_font;
+ font_map[p_node_type][p_name] = p_font;
if (p_font.is_valid()) {
- font_map[p_type][p_name]->connect("changed", callable_mp(this, &Theme::_emit_theme_changed), varray(), CONNECT_REFERENCE_COUNTED);
+ font_map[p_node_type][p_name]->connect("changed", callable_mp(this, &Theme::_emit_theme_changed), varray(), CONNECT_REFERENCE_COUNTED);
}
if (new_value) {
@@ -523,9 +523,9 @@ void Theme::set_font(const StringName &p_name, const StringName &p_type, const R
}
}
-Ref<Font> Theme::get_font(const StringName &p_name, const StringName &p_type) const {
- if (font_map.has(p_type) && font_map[p_type].has(p_name) && font_map[p_type][p_name].is_valid()) {
- return font_map[p_type][p_name];
+Ref<Font> Theme::get_font(const StringName &p_name, const StringName &p_node_type) const {
+ if (font_map.has(p_node_type) && font_map[p_node_type].has(p_name) && font_map[p_node_type][p_name].is_valid()) {
+ return font_map[p_node_type][p_name];
} else if (default_theme_font.is_valid()) {
return default_theme_font;
} else {
@@ -533,41 +533,41 @@ Ref<Font> Theme::get_font(const StringName &p_name, const StringName &p_type) co
}
}
-bool Theme::has_font(const StringName &p_name, const StringName &p_type) const {
- return (font_map.has(p_type) && font_map[p_type].has(p_name) && font_map[p_type][p_name].is_valid());
+bool Theme::has_font(const StringName &p_name, const StringName &p_node_type) const {
+ return (font_map.has(p_node_type) && font_map[p_node_type].has(p_name) && font_map[p_node_type][p_name].is_valid());
}
-void Theme::clear_font(const StringName &p_name, const StringName &p_type) {
- ERR_FAIL_COND(!font_map.has(p_type));
- ERR_FAIL_COND(!font_map[p_type].has(p_name));
+void Theme::clear_font(const StringName &p_name, const StringName &p_node_type) {
+ ERR_FAIL_COND(!font_map.has(p_node_type));
+ ERR_FAIL_COND(!font_map[p_node_type].has(p_name));
- if (font_map[p_type][p_name].is_valid()) {
- font_map[p_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
+ if (font_map[p_node_type][p_name].is_valid()) {
+ font_map[p_node_type][p_name]->disconnect("changed", callable_mp(this, &Theme::_emit_theme_changed));
}
- font_map[p_type].erase(p_name);
+ font_map[p_node_type].erase(p_name);
_change_notify();
emit_changed();
}
-void Theme::get_font_list(StringName p_type, List<StringName> *p_list) const {
+void Theme::get_font_list(StringName p_node_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
- if (!font_map.has(p_type)) {
+ if (!font_map.has(p_node_type)) {
return;
}
const StringName *key = nullptr;
- while ((key = font_map[p_type].next(key))) {
+ while ((key = font_map[p_node_type].next(key))) {
p_list->push_back(*key);
}
}
-void Theme::set_color(const StringName &p_name, const StringName &p_type, const Color &p_color) {
- bool new_value = !color_map.has(p_type) || !color_map[p_type].has(p_name);
+void Theme::set_color(const StringName &p_name, const StringName &p_node_type, const Color &p_color) {
+ bool new_value = !color_map.has(p_node_type) || !color_map[p_node_type].has(p_name);
- color_map[p_type][p_name] = p_color;
+ color_map[p_node_type][p_name] = p_color;
if (new_value) {
_change_notify();
@@ -575,44 +575,44 @@ void Theme::set_color(const StringName &p_name, const StringName &p_type, const
}
}
-Color Theme::get_color(const StringName &p_name, const StringName &p_type) const {
- if (color_map.has(p_type) && color_map[p_type].has(p_name)) {
- return color_map[p_type][p_name];
+Color Theme::get_color(const StringName &p_name, const StringName &p_node_type) const {
+ if (color_map.has(p_node_type) && color_map[p_node_type].has(p_name)) {
+ return color_map[p_node_type][p_name];
} else {
return Color();
}
}
-bool Theme::has_color(const StringName &p_name, const StringName &p_type) const {
- return (color_map.has(p_type) && color_map[p_type].has(p_name));
+bool Theme::has_color(const StringName &p_name, const StringName &p_node_type) const {
+ return (color_map.has(p_node_type) && color_map[p_node_type].has(p_name));
}
-void Theme::clear_color(const StringName &p_name, const StringName &p_type) {
- ERR_FAIL_COND(!color_map.has(p_type));
- ERR_FAIL_COND(!color_map[p_type].has(p_name));
+void Theme::clear_color(const StringName &p_name, const StringName &p_node_type) {
+ ERR_FAIL_COND(!color_map.has(p_node_type));
+ ERR_FAIL_COND(!color_map[p_node_type].has(p_name));
- color_map[p_type].erase(p_name);
+ color_map[p_node_type].erase(p_name);
_change_notify();
emit_changed();
}
-void Theme::get_color_list(StringName p_type, List<StringName> *p_list) const {
+void Theme::get_color_list(StringName p_node_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
- if (!color_map.has(p_type)) {
+ if (!color_map.has(p_node_type)) {
return;
}
const StringName *key = nullptr;
- while ((key = color_map[p_type].next(key))) {
+ while ((key = color_map[p_node_type].next(key))) {
p_list->push_back(*key);
}
}
-void Theme::set_constant(const StringName &p_name, const StringName &p_type, int p_constant) {
- bool new_value = !constant_map.has(p_type) || !constant_map[p_type].has(p_name);
- constant_map[p_type][p_name] = p_constant;
+void Theme::set_constant(const StringName &p_name, const StringName &p_node_type, int p_constant) {
+ bool new_value = !constant_map.has(p_node_type) || !constant_map[p_node_type].has(p_name);
+ constant_map[p_node_type][p_name] = p_constant;
if (new_value) {
_change_notify();
@@ -620,37 +620,37 @@ void Theme::set_constant(const StringName &p_name, const StringName &p_type, int
}
}
-int Theme::get_constant(const StringName &p_name, const StringName &p_type) const {
- if (constant_map.has(p_type) && constant_map[p_type].has(p_name)) {
- return constant_map[p_type][p_name];
+int Theme::get_constant(const StringName &p_name, const StringName &p_node_type) const {
+ if (constant_map.has(p_node_type) && constant_map[p_node_type].has(p_name)) {
+ return constant_map[p_node_type][p_name];
} else {
return 0;
}
}
-bool Theme::has_constant(const StringName &p_name, const StringName &p_type) const {
- return (constant_map.has(p_type) && constant_map[p_type].has(p_name));
+bool Theme::has_constant(const StringName &p_name, const StringName &p_node_type) const {
+ return (constant_map.has(p_node_type) && constant_map[p_node_type].has(p_name));
}
-void Theme::clear_constant(const StringName &p_name, const StringName &p_type) {
- ERR_FAIL_COND(!constant_map.has(p_type));
- ERR_FAIL_COND(!constant_map[p_type].has(p_name));
+void Theme::clear_constant(const StringName &p_name, const StringName &p_node_type) {
+ ERR_FAIL_COND(!constant_map.has(p_node_type));
+ ERR_FAIL_COND(!constant_map[p_node_type].has(p_name));
- constant_map[p_type].erase(p_name);
+ constant_map[p_node_type].erase(p_name);
_change_notify();
emit_changed();
}
-void Theme::get_constant_list(StringName p_type, List<StringName> *p_list) const {
+void Theme::get_constant_list(StringName p_node_type, List<StringName> *p_list) const {
ERR_FAIL_NULL(p_list);
- if (!constant_map.has(p_type)) {
+ if (!constant_map.has(p_node_type)) {
return;
}
const StringName *key = nullptr;
- while ((key = constant_map[p_type].next(key))) {
+ while ((key = constant_map[p_node_type].next(key))) {
p_list->push_back(*key);
}
}
@@ -800,43 +800,43 @@ void Theme::get_type_list(List<StringName> *p_list) const {
}
void Theme::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_icon", "name", "type", "texture"), &Theme::set_icon);
- ClassDB::bind_method(D_METHOD("get_icon", "name", "type"), &Theme::get_icon);
- ClassDB::bind_method(D_METHOD("has_icon", "name", "type"), &Theme::has_icon);
- ClassDB::bind_method(D_METHOD("clear_icon", "name", "type"), &Theme::clear_icon);
- ClassDB::bind_method(D_METHOD("get_icon_list", "type"), &Theme::_get_icon_list);
-
- ClassDB::bind_method(D_METHOD("set_stylebox", "name", "type", "texture"), &Theme::set_stylebox);
- ClassDB::bind_method(D_METHOD("get_stylebox", "name", "type"), &Theme::get_stylebox);
- ClassDB::bind_method(D_METHOD("has_stylebox", "name", "type"), &Theme::has_stylebox);
- ClassDB::bind_method(D_METHOD("clear_stylebox", "name", "type"), &Theme::clear_stylebox);
- ClassDB::bind_method(D_METHOD("get_stylebox_list", "type"), &Theme::_get_stylebox_list);
+ ClassDB::bind_method(D_METHOD("set_icon", "name", "node_type", "texture"), &Theme::set_icon);
+ ClassDB::bind_method(D_METHOD("get_icon", "name", "node_type"), &Theme::get_icon);
+ ClassDB::bind_method(D_METHOD("has_icon", "name", "node_type"), &Theme::has_icon);
+ ClassDB::bind_method(D_METHOD("clear_icon", "name", "node_type"), &Theme::clear_icon);
+ ClassDB::bind_method(D_METHOD("get_icon_list", "node_type"), &Theme::_get_icon_list);
+
+ ClassDB::bind_method(D_METHOD("set_stylebox", "name", "node_type", "texture"), &Theme::set_stylebox);
+ ClassDB::bind_method(D_METHOD("get_stylebox", "name", "node_type"), &Theme::get_stylebox);
+ ClassDB::bind_method(D_METHOD("has_stylebox", "name", "node_type"), &Theme::has_stylebox);
+ ClassDB::bind_method(D_METHOD("clear_stylebox", "name", "node_type"), &Theme::clear_stylebox);
+ ClassDB::bind_method(D_METHOD("get_stylebox_list", "node_type"), &Theme::_get_stylebox_list);
ClassDB::bind_method(D_METHOD("get_stylebox_types"), &Theme::_get_stylebox_types);
- ClassDB::bind_method(D_METHOD("set_font", "name", "type", "font"), &Theme::set_font);
- ClassDB::bind_method(D_METHOD("get_font", "name", "type"), &Theme::get_font);
- ClassDB::bind_method(D_METHOD("has_font", "name", "type"), &Theme::has_font);
- ClassDB::bind_method(D_METHOD("clear_font", "name", "type"), &Theme::clear_font);
- ClassDB::bind_method(D_METHOD("get_font_list", "type"), &Theme::_get_font_list);
+ ClassDB::bind_method(D_METHOD("set_font", "name", "node_type", "font"), &Theme::set_font);
+ ClassDB::bind_method(D_METHOD("get_font", "name", "node_type"), &Theme::get_font);
+ ClassDB::bind_method(D_METHOD("has_font", "name", "node_type"), &Theme::has_font);
+ ClassDB::bind_method(D_METHOD("clear_font", "name", "node_type"), &Theme::clear_font);
+ ClassDB::bind_method(D_METHOD("get_font_list", "node_type"), &Theme::_get_font_list);
- ClassDB::bind_method(D_METHOD("set_color", "name", "type", "color"), &Theme::set_color);
- ClassDB::bind_method(D_METHOD("get_color", "name", "type"), &Theme::get_color);
- ClassDB::bind_method(D_METHOD("has_color", "name", "type"), &Theme::has_color);
- ClassDB::bind_method(D_METHOD("clear_color", "name", "type"), &Theme::clear_color);
- ClassDB::bind_method(D_METHOD("get_color_list", "type"), &Theme::_get_color_list);
+ ClassDB::bind_method(D_METHOD("set_color", "name", "node_type", "color"), &Theme::set_color);
+ ClassDB::bind_method(D_METHOD("get_color", "name", "node_type"), &Theme::get_color);
+ ClassDB::bind_method(D_METHOD("has_color", "name", "node_type"), &Theme::has_color);
+ ClassDB::bind_method(D_METHOD("clear_color", "name", "node_type"), &Theme::clear_color);
+ ClassDB::bind_method(D_METHOD("get_color_list", "node_type"), &Theme::_get_color_list);
- ClassDB::bind_method(D_METHOD("set_constant", "name", "type", "constant"), &Theme::set_constant);
- ClassDB::bind_method(D_METHOD("get_constant", "name", "type"), &Theme::get_constant);
- ClassDB::bind_method(D_METHOD("has_constant", "name", "type"), &Theme::has_constant);
- ClassDB::bind_method(D_METHOD("clear_constant", "name", "type"), &Theme::clear_constant);
- ClassDB::bind_method(D_METHOD("get_constant_list", "type"), &Theme::_get_constant_list);
+ ClassDB::bind_method(D_METHOD("set_constant", "name", "node_type", "constant"), &Theme::set_constant);
+ ClassDB::bind_method(D_METHOD("get_constant", "name", "node_type"), &Theme::get_constant);
+ ClassDB::bind_method(D_METHOD("has_constant", "name", "node_type"), &Theme::has_constant);
+ ClassDB::bind_method(D_METHOD("clear_constant", "name", "node_type"), &Theme::clear_constant);
+ ClassDB::bind_method(D_METHOD("get_constant_list", "node_type"), &Theme::_get_constant_list);
ClassDB::bind_method(D_METHOD("clear"), &Theme::clear);
ClassDB::bind_method(D_METHOD("set_default_font", "font"), &Theme::set_default_theme_font);
ClassDB::bind_method(D_METHOD("get_default_font"), &Theme::get_default_theme_font);
- ClassDB::bind_method(D_METHOD("get_type_list", "type"), &Theme::_get_type_list);
+ ClassDB::bind_method(D_METHOD("get_type_list", "node_type"), &Theme::_get_type_list);
ClassDB::bind_method("copy_default_theme", &Theme::copy_default_theme);
ClassDB::bind_method(D_METHOD("copy_theme", "other"), &Theme::copy_theme);
diff --git a/scene/resources/theme.h b/scene/resources/theme.h
index 5f46ce6303..9c17a69e5d 100644
--- a/scene/resources/theme.h
+++ b/scene/resources/theme.h
@@ -51,13 +51,13 @@ class Theme : public Resource {
HashMap<StringName, HashMap<StringName, Color>> color_map;
HashMap<StringName, HashMap<StringName, int>> constant_map;
- Vector<String> _get_icon_list(const String &p_type) const;
- Vector<String> _get_stylebox_list(const String &p_type) const;
+ Vector<String> _get_icon_list(const String &p_node_type) const;
+ Vector<String> _get_stylebox_list(const String &p_node_type) const;
Vector<String> _get_stylebox_types() const;
- Vector<String> _get_font_list(const String &p_type) const;
- Vector<String> _get_color_list(const String &p_type) const;
- Vector<String> _get_constant_list(const String &p_type) const;
- Vector<String> _get_type_list(const String &p_type) const;
+ Vector<String> _get_font_list(const String &p_node_type) const;
+ Vector<String> _get_color_list(const String &p_node_type) const;
+ Vector<String> _get_constant_list(const String &p_node_type) const;
+ Vector<String> _get_type_list(const String &p_node_type) const;
protected:
bool _set(const StringName &p_name, const Variant &p_value);
@@ -88,42 +88,42 @@ public:
void set_default_theme_font(const Ref<Font> &p_default_font);
Ref<Font> get_default_theme_font() const;
- void set_icon(const StringName &p_name, const StringName &p_type, const Ref<Texture2D> &p_icon);
- Ref<Texture2D> get_icon(const StringName &p_name, const StringName &p_type) const;
- bool has_icon(const StringName &p_name, const StringName &p_type) const;
- void clear_icon(const StringName &p_name, const StringName &p_type);
- void get_icon_list(StringName p_type, List<StringName> *p_list) const;
-
- void set_shader(const StringName &p_name, const StringName &p_type, const Ref<Shader> &p_shader);
- Ref<Shader> get_shader(const StringName &p_name, const StringName &p_type) const;
- bool has_shader(const StringName &p_name, const StringName &p_type) const;
- void clear_shader(const StringName &p_name, const StringName &p_type);
- void get_shader_list(const StringName &p_type, List<StringName> *p_list) const;
-
- void set_stylebox(const StringName &p_name, const StringName &p_type, const Ref<StyleBox> &p_style);
- Ref<StyleBox> get_stylebox(const StringName &p_name, const StringName &p_type) const;
- bool has_stylebox(const StringName &p_name, const StringName &p_type) const;
- void clear_stylebox(const StringName &p_name, const StringName &p_type);
- void get_stylebox_list(StringName p_type, List<StringName> *p_list) const;
+ void set_icon(const StringName &p_name, const StringName &p_node_type, const Ref<Texture2D> &p_icon);
+ Ref<Texture2D> get_icon(const StringName &p_name, const StringName &p_node_type) const;
+ bool has_icon(const StringName &p_name, const StringName &p_node_type) const;
+ void clear_icon(const StringName &p_name, const StringName &p_node_type);
+ void get_icon_list(StringName p_node_type, List<StringName> *p_list) const;
+
+ void set_shader(const StringName &p_name, const StringName &p_node_type, const Ref<Shader> &p_shader);
+ Ref<Shader> get_shader(const StringName &p_name, const StringName &p_node_type) const;
+ bool has_shader(const StringName &p_name, const StringName &p_node_type) const;
+ void clear_shader(const StringName &p_name, const StringName &p_node_type);
+ void get_shader_list(const StringName &p_node_type, List<StringName> *p_list) const;
+
+ void set_stylebox(const StringName &p_name, const StringName &p_node_type, const Ref<StyleBox> &p_style);
+ Ref<StyleBox> get_stylebox(const StringName &p_name, const StringName &p_node_type) const;
+ bool has_stylebox(const StringName &p_name, const StringName &p_node_type) const;
+ void clear_stylebox(const StringName &p_name, const StringName &p_node_type);
+ void get_stylebox_list(StringName p_node_type, List<StringName> *p_list) const;
void get_stylebox_types(List<StringName> *p_list) const;
- void set_font(const StringName &p_name, const StringName &p_type, const Ref<Font> &p_font);
- Ref<Font> get_font(const StringName &p_name, const StringName &p_type) const;
- bool has_font(const StringName &p_name, const StringName &p_type) const;
- void clear_font(const StringName &p_name, const StringName &p_type);
- void get_font_list(StringName p_type, List<StringName> *p_list) const;
-
- void set_color(const StringName &p_name, const StringName &p_type, const Color &p_color);
- Color get_color(const StringName &p_name, const StringName &p_type) const;
- bool has_color(const StringName &p_name, const StringName &p_type) const;
- void clear_color(const StringName &p_name, const StringName &p_type);
- void get_color_list(StringName p_type, List<StringName> *p_list) const;
-
- void set_constant(const StringName &p_name, const StringName &p_type, int p_constant);
- int get_constant(const StringName &p_name, const StringName &p_type) const;
- bool has_constant(const StringName &p_name, const StringName &p_type) const;
- void clear_constant(const StringName &p_name, const StringName &p_type);
- void get_constant_list(StringName p_type, List<StringName> *p_list) const;
+ void set_font(const StringName &p_name, const StringName &p_node_type, const Ref<Font> &p_font);
+ Ref<Font> get_font(const StringName &p_name, const StringName &p_node_type) const;
+ bool has_font(const StringName &p_name, const StringName &p_node_type) const;
+ void clear_font(const StringName &p_name, const StringName &p_node_type);
+ void get_font_list(StringName p_node_type, List<StringName> *p_list) const;
+
+ void set_color(const StringName &p_name, const StringName &p_node_type, const Color &p_color);
+ Color get_color(const StringName &p_name, const StringName &p_node_type) const;
+ bool has_color(const StringName &p_name, const StringName &p_node_type) const;
+ void clear_color(const StringName &p_name, const StringName &p_node_type);
+ void get_color_list(StringName p_node_type, List<StringName> *p_list) const;
+
+ void set_constant(const StringName &p_name, const StringName &p_node_type, int p_constant);
+ int get_constant(const StringName &p_name, const StringName &p_node_type) const;
+ bool has_constant(const StringName &p_name, const StringName &p_node_type) const;
+ void clear_constant(const StringName &p_name, const StringName &p_node_type);
+ void get_constant_list(StringName p_node_type, List<StringName> *p_list) const;
void get_type_list(List<StringName> *p_list) const;
diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp
index 141d4b09f5..283d89e5cf 100644
--- a/scene/resources/visual_shader.cpp
+++ b/scene/resources/visual_shader.cpp
@@ -1849,7 +1849,6 @@ const VisualShaderNodeInput::Port VisualShaderNodeInput::ports[] = {
};
const VisualShaderNodeInput::Port VisualShaderNodeInput::preview_ports[] = {
-
// Spatial, Fragment
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR, "normal", "vec3(0.0, 0.0, 1.0)" },
{ Shader::MODE_SPATIAL, VisualShader::TYPE_FRAGMENT, VisualShaderNode::PORT_TYPE_VECTOR, "tangent", "vec3(0.0, 1.0, 0.0)" },
diff --git a/servers/audio/effects/audio_effect_chorus.h b/servers/audio/effects/audio_effect_chorus.h
index 81af948530..b32b300dfa 100644
--- a/servers/audio/effects/audio_effect_chorus.h
+++ b/servers/audio/effects/audio_effect_chorus.h
@@ -60,7 +60,6 @@ class AudioEffectChorus : public AudioEffect {
public:
enum {
-
MAX_DELAY_MS = 50,
MAX_DEPTH_MS = 20,
MAX_WIDTH_MS = 50,
diff --git a/servers/audio/effects/audio_effect_delay.h b/servers/audio/effects/audio_effect_delay.h
index a55000af4b..3b7f2ea458 100644
--- a/servers/audio/effects/audio_effect_delay.h
+++ b/servers/audio/effects/audio_effect_delay.h
@@ -62,7 +62,6 @@ class AudioEffectDelay : public AudioEffect {
friend class AudioEffectDelayInstance;
enum {
-
MAX_DELAY_MS = 3000,
MAX_TAPS = 2
};
diff --git a/servers/audio/effects/audio_effect_pitch_shift.cpp b/servers/audio/effects/audio_effect_pitch_shift.cpp
index fb6b56d984..fdba1b59a3 100644
--- a/servers/audio/effects/audio_effect_pitch_shift.cpp
+++ b/servers/audio/effects/audio_effect_pitch_shift.cpp
@@ -95,14 +95,12 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
expct = 2.*Math_PI*(double)stepSize/(double)fftFrameSize;
inFifoLatency = fftFrameSize-stepSize;
if (gRover == 0) { gRover = inFifoLatency;
-
}
/* initialize our static arrays */
/* main processing loop */
for (i = 0; i < numSampsToProcess; i++){
-
/* As long as we have not yet collected enough data just read in */
gInFIFO[gRover] = indata[i*stride];
outdata[i*stride] = gOutFIFO[gRover-inFifoLatency];
@@ -126,7 +124,6 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
/* this is the analysis step */
for (k = 0; k <= fftFrameSize2; k++) {
-
/* de-interlace FFT buffer */
real = gFFTworksp[2*k];
imag = gFFTworksp[2*k+1];
@@ -146,7 +143,6 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
qpd = tmp/Math_PI;
if (qpd >= 0) { qpd += qpd&1;
} else { qpd -= qpd&1;
-
}
tmp -= Math_PI*(double)qpd;
@@ -177,7 +173,6 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
/* ***************** SYNTHESIS ******************* */
/* this is the synthesis step */
for (k = 0; k <= fftFrameSize2; k++) {
-
/* get magnitude and true frequency from synthesis arrays */
magn = gSynMagn[k];
tmp = gSynFreq[k];
@@ -205,7 +200,6 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
/* zero negative frequencies */
for (k = fftFrameSize+2; k < 2*fftFrameSize; k++) { gFFTworksp[k] = 0.;
-
}
/* do inverse transform */
@@ -217,7 +211,6 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
gOutputAccum[k] += 2.*window*gFFTworksp[2*k]/(fftFrameSize2*osamp);
}
for (k = 0; k < stepSize; k++) { gOutFIFO[k] = gOutputAccum[k];
-
}
/* shift accumulator */
@@ -225,13 +218,9 @@ void SMBPitchShift::PitchShift(float pitchShift, long numSampsToProcess, long ff
/* move input FIFO */
for (k = 0; k < inFifoLatency; k++) { gInFIFO[k] = gInFIFO[k+stepSize];
-
}
}
}
-
-
-
}
@@ -256,7 +245,6 @@ void SMBPitchShift::smbFft(float *fftBuffer, long fftFrameSize, long sign)
for (i = 2; i < 2*fftFrameSize-2; i += 2) {
for (bitm = 2, j = 0; bitm < 2*fftFrameSize; bitm <<= 1) {
if (i & bitm) { j++;
-
}
j <<= 1;
}
diff --git a/servers/audio/effects/audio_effect_stereo_enhance.h b/servers/audio/effects/audio_effect_stereo_enhance.h
index 7fb32bd8ec..98ee18ba5a 100644
--- a/servers/audio/effects/audio_effect_stereo_enhance.h
+++ b/servers/audio/effects/audio_effect_stereo_enhance.h
@@ -41,7 +41,6 @@ class AudioEffectStereoEnhanceInstance : public AudioEffectInstance {
Ref<AudioEffectStereoEnhance> base;
enum {
-
MAX_DELAY_MS = 50
};
diff --git a/servers/audio/effects/eq.h b/servers/audio/effects/eq.h
index 720c4dfcaf..c908c9c8fb 100644
--- a/servers/audio/effects/eq.h
+++ b/servers/audio/effects/eq.h
@@ -43,7 +43,6 @@
class EQ {
public:
enum Preset {
-
PRESET_6_BANDS,
PRESET_8_BANDS,
PRESET_10_BANDS,
diff --git a/servers/audio/effects/reverb.cpp b/servers/audio/effects/reverb.cpp
index 7c35d88ced..1deb1499b5 100644
--- a/servers/audio/effects/reverb.cpp
+++ b/servers/audio/effects/reverb.cpp
@@ -127,13 +127,11 @@ void Reverb::process(float *p_src, float *p_dst, int p_frames) {
int ap_size_limit[MAX_ALLPASS];
for (int i=0;i<MAX_ALLPASS;i++) {
-
AllPass &a=allpass[i];
ap_size_limit[i]=a.size-lrintf((float)a.extra_spread_frames*(1.0-params.extra_spread));
}
for (int i=0;i<p_frames;i++) {
-
float sample=p_dst[i];
float aux,in;
float AllPass*ap;
diff --git a/servers/audio/effects/reverb.h b/servers/audio/effects/reverb.h
index 614de0c534..7dd88f9faf 100644
--- a/servers/audio/effects/reverb.h
+++ b/servers/audio/effects/reverb.h
@@ -46,7 +46,6 @@ public:
private:
enum {
-
MAX_COMBS = 8,
MAX_ALLPASS = 4,
MAX_ECHO_MS = 500
diff --git a/servers/audio_server.h b/servers/audio_server.h
index 507aea7b89..83377a5e9e 100644
--- a/servers/audio_server.h
+++ b/servers/audio_server.h
@@ -122,7 +122,6 @@ public:
class AudioDriverManager {
enum {
-
MAX_DRIVERS = 10
};
diff --git a/servers/display_server.h b/servers/display_server.h
index c2ffb23531..59bee794b8 100644
--- a/servers/display_server.h
+++ b/servers/display_server.h
@@ -177,7 +177,6 @@ public:
}
virtual bool screen_is_touchscreen(int p_screen = SCREEN_OF_MAIN_WINDOW) const;
enum ScreenOrientation {
-
SCREEN_LANDSCAPE,
SCREEN_PORTRAIT,
SCREEN_REVERSE_LANDSCAPE,
diff --git a/servers/physics_2d/physics_server_2d_sw.cpp b/servers/physics_2d/physics_server_2d_sw.cpp
index 9d00d01759..755804fe36 100644
--- a/servers/physics_2d/physics_server_2d_sw.cpp
+++ b/servers/physics_2d/physics_server_2d_sw.cpp
@@ -1230,8 +1230,6 @@ void PhysicsServer2DSW::step(real_t p_step) {
_update_shapes();
- doing_sync = false;
-
last_step = p_step;
PhysicsDirectBodyState2DSW::singleton->step = p_step;
island_count = 0;
diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp
index a8ab731ead..edadcabe0b 100644
--- a/servers/physics_2d/space_2d_sw.cpp
+++ b/servers/physics_2d/space_2d_sw.cpp
@@ -603,7 +603,6 @@ int Space2DSW::test_body_ray_separation(Body2DSW *p_body, const Transform2D &p_t
* direction. Use a short ray shape if you want to achieve a similar effect.
*
if (col_obj->is_shape_set_as_one_way_collision(shape_idx)) {
-
cbk.valid_dir = col_obj_shape_xform.get_axis(1).normalized();
cbk.valid_depth = p_margin; //only valid depth is the collision margin
cbk.invalid_by_dir = 0;
diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h
index 5c5144ae22..93b62e0ba4 100644
--- a/servers/physics_2d/space_2d_sw.h
+++ b/servers/physics_2d/space_2d_sw.h
@@ -105,7 +105,6 @@ private:
real_t test_motion_min_contact_depth;
enum {
-
INTERSECTION_QUERY_MAX = 2048
};
diff --git a/servers/physics_3d/body_3d_sw.cpp b/servers/physics_3d/body_3d_sw.cpp
index d1f16cb4ae..841e593ba3 100644
--- a/servers/physics_3d/body_3d_sw.cpp
+++ b/servers/physics_3d/body_3d_sw.cpp
@@ -628,7 +628,6 @@ void Body3DSW::integrate_velocities(real_t p_step) {
/*
void BodySW::simulate_motion(const Transform& p_xform,real_t p_step) {
-
Transform inv_xform = p_xform.affine_inverse();
if (!get_space()) {
_set_transform(p_xform);
@@ -655,8 +654,6 @@ void BodySW::simulate_motion(const Transform& p_xform,real_t p_step) {
get_space()->body_add_to_state_query_list(&direct_state_query_list);
simulated_motion=true;
_set_transform(p_xform);
-
-
}
*/
diff --git a/servers/physics_3d/body_pair_3d_sw.h b/servers/physics_3d/body_pair_3d_sw.h
index 59e36e7ea5..5f08d0cfa9 100644
--- a/servers/physics_3d/body_pair_3d_sw.h
+++ b/servers/physics_3d/body_pair_3d_sw.h
@@ -36,7 +36,6 @@
class BodyPair3DSW : public Constraint3DSW {
enum {
-
MAX_CONTACTS = 4
};
diff --git a/servers/physics_3d/gjk_epa.cpp b/servers/physics_3d/gjk_epa.cpp
index d99a2532f8..e14949543e 100644
--- a/servers/physics_3d/gjk_epa.cpp
+++ b/servers/physics_3d/gjk_epa.cpp
@@ -102,7 +102,6 @@ typedef unsigned char U1;
// MinkowskiDiff
struct MinkowskiDiff {
-
const Shape3DSW* m_shapes[2];
Transform transform_A;
@@ -127,7 +126,6 @@ struct MinkowskiDiff {
return ( Support1 ( d ) );
} else {
return ( Support0 ( d ) );
-
}
}
};
@@ -281,7 +279,6 @@ struct GJK
}
}
if(mask==15) { m_status=eStatus::Inside;
-
}
}
else
@@ -312,12 +309,10 @@ struct GJK
axis[i]=1;
appendvertice(*m_simplex, axis);
if(EncloseOrigin()) { return(true);
-
}
removevertice(*m_simplex);
appendvertice(*m_simplex,-axis);
if(EncloseOrigin()) { return(true);
-
}
removevertice(*m_simplex);
}
@@ -335,12 +330,10 @@ struct GJK
{
appendvertice(*m_simplex, p);
if(EncloseOrigin()) { return(true);
-
}
removevertice(*m_simplex);
appendvertice(*m_simplex,-p);
if(EncloseOrigin()) { return(true);
-
}
removevertice(*m_simplex);
}
@@ -355,12 +348,10 @@ struct GJK
{
appendvertice(*m_simplex,n);
if(EncloseOrigin()) { return(true);
-
}
removevertice(*m_simplex);
appendvertice(*m_simplex,-n);
if(EncloseOrigin()) { return(true);
-
}
removevertice(*m_simplex);
}
@@ -372,7 +363,6 @@ struct GJK
m_simplex->c[1]->w-m_simplex->c[3]->w,
m_simplex->c[2]->w-m_simplex->c[3]->w))>0) {
return(true);
-
}
}
break;
@@ -580,7 +570,6 @@ struct GJK
face->l[0] = nullptr;
face->l[1] = list.root;
if(list.root) { list.root->l[0]=face;
-
}
list.root = face;
++list.count;
@@ -588,13 +577,10 @@ struct GJK
static inline void remove(sList& list,sFace* face)
{
if(face->l[1]) { face->l[1]->l[0]=face->l[0];
-
}
if(face->l[0]) { face->l[0]->l[1]=face->l[1];
-
}
if(face==list.root) { list.root=face->l[1];
-
}
--list.count;
}
@@ -616,7 +602,6 @@ struct GJK
GJK::sSimplex& simplex=*gjk.m_simplex;
if((simplex.rank>1)&&gjk.EncloseOrigin())
{
-
/* Clean up */
while(m_hull.root)
{
@@ -677,7 +662,6 @@ struct GJK
append(m_stock,best);
best=findbest();
if(best->p>=outer.p) { outer=*best;
-
}
} else { m_status=eStatus::InvalidHull;break; }
} else { m_status=eStatus::AccuraryReached;break; }
@@ -711,7 +695,6 @@ struct GJK
m_normal = m_normal/nl;
} else {
m_normal = Vector3(1,0,0);
-
}
m_depth = 0;
m_result.rank=1;
@@ -747,10 +730,8 @@ struct GJK
{
return(face);
} else { m_status=eStatus::NonConvex;
-
}
} else { m_status=eStatus::Degenerated;
-
}
remove(m_hull,face);
append(m_stock,face);
@@ -793,7 +774,6 @@ struct GJK
{
bind(nf,0,f,e);
if(horizon.cf) { bind(horizon.cf,1,nf,2); } else { horizon.ff=nf;
-
}
horizon.cf=nf;
++horizon.nf;
@@ -917,7 +897,6 @@ bool Penetration( const Shape3DSW* shape0,
results.distance = -epa.m_depth;
return(true);
} else { results.status=sResults::EPA_Failed;
-
}
}
break;
@@ -948,8 +927,6 @@ bool Penetration( const Shape3DSW* shape0,
#undef EPA_FALLBACK
#undef EPA_PLANE_EPS
#undef EPA_INSIDE_EPS
-
-
} // end of namespace
/* clang-format on */
diff --git a/servers/physics_3d/joints/generic_6dof_joint_3d_sw.cpp b/servers/physics_3d/joints/generic_6dof_joint_3d_sw.cpp
index fede40ca65..9ce5ebb7ed 100644
--- a/servers/physics_3d/joints/generic_6dof_joint_3d_sw.cpp
+++ b/servers/physics_3d/joints/generic_6dof_joint_3d_sw.cpp
@@ -253,7 +253,6 @@ void Generic6DOFJoint3DSW::calculateAngleInfo() {
/*
if(m_debugDrawer)
{
-
char buff[300];
sprintf(buff,"\n X: %.2f ; Y: %.2f ; Z: %.2f ",
m_calculatedAxisAngleDiff[0],
diff --git a/servers/physics_3d/joints/hinge_joint_3d_sw.cpp b/servers/physics_3d/joints/hinge_joint_3d_sw.cpp
index 52c7389e1f..c6fbc0f55f 100644
--- a/servers/physics_3d/joints/hinge_joint_3d_sw.cpp
+++ b/servers/physics_3d/joints/hinge_joint_3d_sw.cpp
@@ -365,7 +365,6 @@ void HingeJoint3DSW::solve(real_t p_step) {
void HingeJointSW::updateRHS(real_t timeStep)
{
(void)timeStep;
-
}
*/
diff --git a/servers/physics_3d/joints/slider_joint_3d_sw.cpp b/servers/physics_3d/joints/slider_joint_3d_sw.cpp
index 43bd49b4b5..dd6cc04f7c 100644
--- a/servers/physics_3d/joints/slider_joint_3d_sw.cpp
+++ b/servers/physics_3d/joints/slider_joint_3d_sw.cpp
@@ -105,7 +105,6 @@ void SliderJoint3DSW::initParams() {
m_targetAngMotorVelocity = real_t(0.);
m_maxAngMotorForce = real_t(0.);
m_accumulatedAngMotorImpulse = real_t(0.0);
-
} // SliderJointSW::initParams()
//-----------------------------------------------------------------------------
diff --git a/servers/physics_3d/physics_server_3d_sw.cpp b/servers/physics_3d/physics_server_3d_sw.cpp
index 143cc9ebbd..07a7498fec 100644
--- a/servers/physics_3d/physics_server_3d_sw.cpp
+++ b/servers/physics_3d/physics_server_3d_sw.cpp
@@ -174,7 +174,7 @@ real_t PhysicsServer3DSW::space_get_param(RID p_space, SpaceParameter p_param) c
PhysicsDirectSpaceState3D *PhysicsServer3DSW::space_get_direct_state(RID p_space) {
Space3DSW *space = space_owner.getornull(p_space);
ERR_FAIL_COND_V(!space, nullptr);
- ERR_FAIL_COND_V_MSG(!doing_sync || space->is_locked(), nullptr, "Space state is inaccessible right now, wait for iteration or physics process notification.");
+ ERR_FAIL_COND_V_MSG(space->is_locked(), nullptr, "Space state is inaccessible right now, wait for iteration or physics process notification.");
return space->get_direct_state();
}
@@ -888,7 +888,7 @@ int PhysicsServer3DSW::body_test_ray_separation(RID p_body, const Transform &p_t
PhysicsDirectBodyState3D *PhysicsServer3DSW::body_get_direct_state(RID p_body) {
Body3DSW *body = body_owner.getornull(p_body);
ERR_FAIL_COND_V(!body, nullptr);
- ERR_FAIL_COND_V_MSG(!doing_sync || body->get_space()->is_locked(), nullptr, "Body state is inaccessible right now, wait for iteration or physics process notification.");
+ ERR_FAIL_COND_V_MSG(body->get_space()->is_locked(), nullptr, "Body state is inaccessible right now, wait for iteration or physics process notification.");
direct_state->body = body;
return direct_state;
@@ -1287,7 +1287,6 @@ void PhysicsServer3DSW::set_active(bool p_active) {
};
void PhysicsServer3DSW::init() {
- doing_sync = true;
last_step = 0.001;
iterations = 8; // 8?
stepper = memnew(Step3DSW);
@@ -1303,8 +1302,6 @@ void PhysicsServer3DSW::step(real_t p_step) {
_update_shapes();
- doing_sync = false;
-
last_step = p_step;
PhysicsDirectBodyState3DSW::singleton->step = p_step;
@@ -1327,8 +1324,6 @@ void PhysicsServer3DSW::flush_queries() {
return;
}
- doing_sync = true;
-
flushing_queries = true;
uint64_t time_beg = OS::get_singleton()->get_ticks_usec();
diff --git a/servers/physics_3d/physics_server_3d_sw.h b/servers/physics_3d/physics_server_3d_sw.h
index a45ee7c2c8..f96a8863c3 100644
--- a/servers/physics_3d/physics_server_3d_sw.h
+++ b/servers/physics_3d/physics_server_3d_sw.h
@@ -44,7 +44,6 @@ class PhysicsServer3DSW : public PhysicsServer3D {
friend class PhysicsDirectSpaceState3DSW;
bool active;
int iterations;
- bool doing_sync;
real_t last_step;
int island_count;
@@ -365,7 +364,6 @@ public:
virtual void set_active(bool p_active) override;
virtual void init() override;
virtual void step(real_t p_step) override;
- virtual void sync() override {}
virtual void flush_queries() override;
virtual void finish() override;
diff --git a/servers/physics_3d/shape_3d_sw.cpp b/servers/physics_3d/shape_3d_sw.cpp
index b8b01de3c3..107f850ebd 100644
--- a/servers/physics_3d/shape_3d_sw.cpp
+++ b/servers/physics_3d/shape_3d_sw.cpp
@@ -333,7 +333,6 @@ void BoxShape3DSW::get_supports(const Vector3 &p_normal, int p_max, Vector3 *r_s
int i_n2 = next2[i];
static const real_t sign[4][2] = {
-
{ -1.0, 1.0 },
{ 1.0, 1.0 },
{ 1.0, -1.0 },
diff --git a/servers/physics_3d/space_3d_sw.h b/servers/physics_3d/space_3d_sw.h
index 6380bcc6dc..22535a6adb 100644
--- a/servers/physics_3d/space_3d_sw.h
+++ b/servers/physics_3d/space_3d_sw.h
@@ -97,7 +97,6 @@ private:
real_t test_motion_min_contact_depth;
enum {
-
INTERSECTION_QUERY_MAX = 2048
};
diff --git a/servers/physics_server_2d.h b/servers/physics_server_2d.h
index 283a2ab58c..f7607d5dd5 100644
--- a/servers/physics_server_2d.h
+++ b/servers/physics_server_2d.h
@@ -276,7 +276,6 @@ public:
virtual bool space_is_active(RID p_space) const = 0;
enum SpaceParameter {
-
SPACE_PARAM_CONTACT_RECYCLE_RADIUS,
SPACE_PARAM_CONTACT_MAX_SEPARATION,
SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION,
@@ -526,7 +525,6 @@ public:
/* JOINT API */
enum JointType {
-
JOINT_PIN,
JOINT_GROOVE,
JOINT_DAMPED_SPRING
@@ -587,7 +585,6 @@ public:
virtual bool is_flushing_queries() const = 0;
enum ProcessInfo {
-
INFO_ACTIVE_OBJECTS,
INFO_COLLISION_PAIRS,
INFO_ISLAND_COUNT
diff --git a/servers/physics_server_3d.h b/servers/physics_server_3d.h
index 90ef2bb8dd..3f7ad26257 100644
--- a/servers/physics_server_3d.h
+++ b/servers/physics_server_3d.h
@@ -259,7 +259,6 @@ public:
virtual bool space_is_active(RID p_space) const = 0;
enum SpaceParameter {
-
SPACE_PARAM_CONTACT_RECYCLE_RADIUS,
SPACE_PARAM_CONTACT_MAX_SEPARATION,
SPACE_PARAM_BODY_MAX_ALLOWED_PENETRATION,
@@ -578,7 +577,6 @@ public:
/* JOINT API */
enum JointType {
-
JOINT_PIN,
JOINT_HINGE,
JOINT_SLIDER,
@@ -613,7 +611,6 @@ public:
virtual Vector3 pin_joint_get_local_b(RID p_joint) const = 0;
enum HingeJointParam {
-
HINGE_JOINT_BIAS,
HINGE_JOINT_LIMIT_UPPER,
HINGE_JOINT_LIMIT_LOWER,
@@ -714,7 +711,6 @@ public:
};
enum G6DOFJointAxisFlag {
-
G6DOF_JOINT_FLAG_ENABLE_LINEAR_LIMIT,
G6DOF_JOINT_FLAG_ENABLE_ANGULAR_LIMIT,
G6DOF_JOINT_FLAG_ENABLE_ANGULAR_SPRING,
@@ -749,14 +745,12 @@ public:
virtual void set_active(bool p_active) = 0;
virtual void init() = 0;
virtual void step(float p_step) = 0;
- virtual void sync() = 0;
virtual void flush_queries() = 0;
virtual void finish() = 0;
virtual bool is_flushing_queries() const = 0;
enum ProcessInfo {
-
INFO_ACTIVE_OBJECTS,
INFO_COLLISION_PAIRS,
INFO_ISLAND_COUNT
diff --git a/servers/rendering/rasterizer.h b/servers/rendering/rasterizer.h
index efaa8f138a..01c957e242 100644
--- a/servers/rendering/rasterizer.h
+++ b/servers/rendering/rasterizer.h
@@ -809,7 +809,6 @@ public:
static RasterizerCanvas *singleton;
enum CanvasRectFlags {
-
CANVAS_RECT_REGION = 1,
CANVAS_RECT_TILE = 2,
CANVAS_RECT_FLIP_H = 4,
@@ -943,7 +942,6 @@ public:
struct Command {
enum Type {
-
TYPE_RECT,
TYPE_NINEPATCH,
TYPE_POLYGON,
diff --git a/servers/rendering/rasterizer_rd/rasterizer_canvas_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_canvas_rd.cpp
index 5d9e68f2b4..174f2d0e58 100644
--- a/servers/rendering/rasterizer_rd/rasterizer_canvas_rd.cpp
+++ b/servers/rendering/rasterizer_rd/rasterizer_canvas_rd.cpp
@@ -687,7 +687,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
#if 0
case Item::Command::TYPE_MESH: {
-
Item::CommandMesh *mesh = static_cast<Item::CommandMesh *>(c);
_set_texture_rect_mode(false);
@@ -702,7 +701,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
RasterizerStorageGLES3::Mesh *mesh_data = storage->mesh_owner.getornull(mesh->mesh);
if (mesh_data) {
-
for (int j = 0; j < mesh_data->surfaces.size(); j++) {
RasterizerStorageGLES3::Surface *s = mesh_data->surfaces[j];
// materials are ignored in 2D meshes, could be added but many things (ie, lighting mode, reading from screen, etc) would break as they are not meant be set up at this point of drawing
@@ -723,7 +721,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
} break;
case Item::Command::TYPE_MULTIMESH: {
-
Item::CommandMultiMesh *mmesh = static_cast<Item::CommandMultiMesh *>(c);
RasterizerStorageGLES3::MultiMesh *multi_mesh = storage->multimesh_owner.getornull(mmesh->multimesh);
@@ -786,7 +783,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
int custom_data_ofs = color_ofs;
switch (multi_mesh->color_format) {
-
case RS::MULTIMESH_COLOR_NONE: {
glDisableVertexAttribArray(11);
glVertexAttrib4f(11, 1, 1, 1, 1);
@@ -807,7 +803,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
}
switch (multi_mesh->custom_data_format) {
-
case RS::MULTIMESH_CUSTOM_DATA_NONE: {
glDisableVertexAttribArray(12);
glVertexAttrib4f(12, 1, 1, 1, 1);
@@ -841,7 +836,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
} break;
case Item::Command::TYPE_PARTICLES: {
-
Item::CommandParticles *particles_cmd = static_cast<Item::CommandParticles *>(c);
RasterizerStorageGLES3::Particles *particles = storage->particles_owner.getornull(particles_cmd->particles);
@@ -875,7 +869,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
}
if (!particles->use_local_coords) {
-
Transform2D inv_xf;
inv_xf.set_axis(0, Vector2(particles->emission_transform.basis.get_axis(0).x, particles->emission_transform.basis.get_axis(0).y));
inv_xf.set_axis(1, Vector2(particles->emission_transform.basis.get_axis(1).x, particles->emission_transform.basis.get_axis(1).y));
@@ -893,7 +886,6 @@ void RasterizerCanvasRD::_render_item(RD::DrawListID p_draw_list, const Item *p_
int amount = particles->amount;
if (particles->draw_order != RS::PARTICLES_DRAW_ORDER_LIFETIME) {
-
glEnableVertexAttribArray(8); //xform x
glVertexAttribPointer(8, 4, GL_FLOAT, GL_FALSE, stride, CAST_INT_TO_UCHAR_PTR(sizeof(float) * 4 * 3));
glVertexAttribDivisor(8, 1);
diff --git a/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp
index a275e46473..313188ba87 100644
--- a/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp
+++ b/servers/rendering/rasterizer_rd/rasterizer_scene_high_end_rd.cpp
@@ -1238,7 +1238,6 @@ void RasterizerSceneHighEndRD::_setup_environment(RID p_environment, RID p_rende
}
#if 0
if (p_render_buffers.is_valid() && render_buffers_is_sdfgi_enabled(p_render_buffers)) {
-
scene_state.ubo.sdfgi_cascade_count = render_buffers_get_sdfgi_cascade_count(p_render_buffers);
scene_state.ubo.sdfgi_probe_axis_size = render_buffers_get_sdfgi_cascade_probe_count(p_render_buffers);
scene_state.ubo.sdfgi_cascade_probe_size[0] = scene_state.ubo.sdfgi_probe_axis_size - 1; //float version for performance
@@ -1583,7 +1582,6 @@ void RasterizerSceneHighEndRD::_fill_render_list(InstanceBase **p_cull_result, i
} break;
#if 0
case RS::INSTANCE_IMMEDIATE: {
-
RasterizerStorageGLES3::Immediate *immediate = storage->immediate_owner.getornull(inst->base);
ERR_CONTINUE(!immediate);
diff --git a/servers/rendering/rasterizer_rd/rasterizer_scene_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_scene_rd.cpp
index e1be9b0ef4..da2b00b7a7 100644
--- a/servers/rendering/rasterizer_rd/rasterizer_scene_rd.cpp
+++ b/servers/rendering/rasterizer_rd/rasterizer_scene_rd.cpp
@@ -1471,7 +1471,9 @@ void RasterizerSceneRD::_setup_giprobes(RID p_render_buffers, const Transform &p
}
if (giprobes_changed) {
- RD::get_singleton()->free(rb->gi_uniform_set);
+ if (RD::get_singleton()->uniform_set_is_valid(rb->gi_uniform_set)) {
+ RD::get_singleton()->free(rb->gi_uniform_set);
+ }
rb->gi_uniform_set = RID();
if (rb->volumetric_fog) {
if (RD::get_singleton()->uniform_set_is_valid(rb->volumetric_fog->uniform_set)) {
diff --git a/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp b/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp
index 8bd4362637..847d73fe51 100644
--- a/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp
+++ b/servers/rendering/rasterizer_rd/rasterizer_storage_rd.cpp
@@ -5549,7 +5549,6 @@ void RasterizerStorageRD::gi_probe_allocate(RID p_gi_probe, const Transform &p_t
}
RID shared_tex;
{
-
RD::TextureView tv;
tv.format_override = RD::DATA_FORMAT_R8_UINT;
shared_tex = RD::get_singleton()->texture_create_shared(tv, gi_probe->sdf_texture);
diff --git a/servers/rendering/rasterizer_rd/shader_compiler_rd.cpp b/servers/rendering/rasterizer_rd/shader_compiler_rd.cpp
index 1a33e9a567..08f4eb6aa0 100644
--- a/servers/rendering/rasterizer_rd/shader_compiler_rd.cpp
+++ b/servers/rendering/rasterizer_rd/shader_compiler_rd.cpp
@@ -671,7 +671,6 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
}
/*
for(Map<StringName,SL::ShaderNode::Uniform>::Element *E=pnode->uniforms.front();E;E=E->next()) {
-
if (SL::is_sampler_type(E->get().type)) {
continue;
}
diff --git a/servers/rendering/rasterizer_rd/shaders/scene_high_end.glsl b/servers/rendering/rasterizer_rd/shaders/scene_high_end.glsl
index da3c60af04..285698f060 100644
--- a/servers/rendering/rasterizer_rd/shaders/scene_high_end.glsl
+++ b/servers/rendering/rasterizer_rd/shaders/scene_high_end.glsl
@@ -868,7 +868,6 @@ void light_process_omni(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
inout float alpha,
#endif
inout vec3 diffuse_light, inout vec3 specular_light) {
-
vec3 light_rel_vec = lights.data[idx].position - vertex;
float light_length = length(light_rel_vec);
float normalized_distance = light_length * lights.data[idx].inv_radius;
@@ -1158,7 +1157,6 @@ void light_process_spot(uint idx, vec3 vertex, vec3 eye_vec, vec3 normal, vec3 v
#endif
inout vec3 diffuse_light,
inout vec3 specular_light) {
-
vec3 light_rel_vec = lights.data[idx].position - vertex;
float light_length = length(light_rel_vec);
float normalized_distance = light_length * lights.data[idx].inv_radius;
diff --git a/servers/rendering/rendering_server_canvas.cpp b/servers/rendering/rendering_server_canvas.cpp
index 5a12be5659..364839c5d7 100644
--- a/servers/rendering/rendering_server_canvas.cpp
+++ b/servers/rendering/rendering_server_canvas.cpp
@@ -582,7 +582,6 @@ void RenderingServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Po
}
for (int i = 0; i < p_points.size(); i++) {
-
Vector2 t;
if (i == p_points.size() - 1) {
t = prev_t;
@@ -608,7 +607,6 @@ void RenderingServerCanvas::canvas_item_add_polyline(RID p_item, const Vector<Po
pline->triangles.write[i * 2 + 1] = p_points[i] - tangent;
if (pline->triangle_colors.size() > 1) {
-
pline->triangle_colors.write[i * 2 + 0] = p_colors[i];
pline->triangle_colors.write[i * 2 + 1] = p_colors[i];
}
diff --git a/servers/rendering/rendering_server_raster.h b/servers/rendering/rendering_server_raster.h
index daad706f8e..60b25f1b94 100644
--- a/servers/rendering/rendering_server_raster.h
+++ b/servers/rendering/rendering_server_raster.h
@@ -41,7 +41,6 @@
class RenderingServerRaster : public RenderingServer {
enum {
-
MAX_INSTANCE_CULL = 8192,
MAX_INSTANCE_LIGHTS = 4,
LIGHT_CACHE_DIRTY = -1,
diff --git a/servers/rendering/rendering_server_scene.h b/servers/rendering/rendering_server_scene.h
index a30aac3bb1..646b2a666f 100644
--- a/servers/rendering/rendering_server_scene.h
+++ b/servers/rendering/rendering_server_scene.h
@@ -45,7 +45,6 @@
class RenderingServerScene {
public:
enum {
-
MAX_INSTANCE_CULL = 65536,
MAX_LIGHTS_CULLED = 4096,
MAX_REFLECTION_PROBES_CULLED = 4096,
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index 046c6ba580..1ab353c9d0 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -2157,7 +2157,6 @@ const ShaderLanguage::BuiltinFuncDef ShaderLanguage::builtin_func_defs[] = {
{ "fma", TYPE_VEC4, { TYPE_VEC4, TYPE_VEC4, TYPE_VEC4, TYPE_VOID }, TAG_GLOBAL, false },
{ nullptr, TYPE_VOID, { TYPE_VOID }, TAG_GLOBAL, false }
-
};
const ShaderLanguage::BuiltinFuncOutArgs ShaderLanguage::builtin_func_out_args[] = {
diff --git a/servers/rendering_server.cpp b/servers/rendering_server.cpp
index cc959afdaa..bd501f8bc5 100644
--- a/servers/rendering_server.cpp
+++ b/servers/rendering_server.cpp
@@ -1431,7 +1431,6 @@ Array RenderingServer::mesh_create_arrays_from_surface_data(const SurfaceData &p
}
#if 0
Array RenderingServer::_mesh_surface_get_skeleton_aabb_bind(RID p_mesh, int p_surface) const {
-
Vector<AABB> vec = RS::get_singleton()->mesh_surface_get_skeleton_aabb(p_mesh, p_surface);
Array arr;
for (int i = 0; i < vec.size(); i++) {
diff --git a/tests/test_astar.h b/tests/test_astar.h
index bef6127471..cd1bd84c15 100644
--- a/tests/test_astar.h
+++ b/tests/test_astar.h
@@ -362,7 +362,6 @@ TEST_CASE("[Stress][AStar] Find paths") {
CHECK_MESSAGE(match, "Found all paths.");
}
}
-
} // namespace TestAStar
#endif // TEST_ASTAR_H
diff --git a/tests/test_basis.h b/tests/test_basis.h
index db4e0b347f..00a00b4a5b 100644
--- a/tests/test_basis.h
+++ b/tests/test_basis.h
@@ -282,7 +282,6 @@ TEST_CASE("[Stress][Basis] Euler conversions") {
}
}
}
-
} // namespace TestBasis
#endif
diff --git a/tests/test_class_db.h b/tests/test_class_db.h
index 29fe837587..9a30891c16 100644
--- a/tests/test_class_db.h
+++ b/tests/test_class_db.h
@@ -830,7 +830,6 @@ TEST_SUITE("[ClassDB]") {
}
}
}
-
} // namespace TestClassDB
#endif //GODOT_TEST_CLASS_DB_H
diff --git a/tests/test_color.h b/tests/test_color.h
index 04b66811e3..c2bb63b7d0 100644
--- a/tests/test_color.h
+++ b/tests/test_color.h
@@ -202,7 +202,6 @@ TEST_CASE("[Color] Manipulation methods") {
red.lerp(yellow, 0.5).is_equal_approx(Color(1, 0.5, 0, 0.5)),
"Red interpolated with yellow should be orange (with interpolated alpha).");
}
-
} // namespace TestColor
#endif // TEST_COLOR_H
diff --git a/tests/test_command_queue.h b/tests/test_command_queue.h
index c3cfa08b61..ce42d94475 100644
--- a/tests/test_command_queue.h
+++ b/tests/test_command_queue.h
@@ -474,7 +474,6 @@ TEST_CASE("[Stress][CommandQueue] Stress test command queue") {
ProjectSettings::get_singleton()->set_setting(COMMAND_QUEUE_SETTING,
ProjectSettings::get_singleton()->property_get_revert(COMMAND_QUEUE_SETTING));
}
-
} // namespace TestCommandQueue
#endif // !defined(NO_THREADS)
diff --git a/tests/test_config_file.h b/tests/test_config_file.h
new file mode 100644
index 0000000000..f910ca4b1f
--- /dev/null
+++ b/tests/test_config_file.h
@@ -0,0 +1,156 @@
+/*************************************************************************/
+/* test_config_file.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_CONFIG_FILE_H
+#define TEST_CONFIG_FILE_H
+
+#include "core/io/config_file.h"
+
+#include "tests/test_macros.h"
+
+namespace TestConfigFile {
+
+TEST_CASE("[ConfigFile] Parsing well-formatted files") {
+ ConfigFile config_file;
+ // Formatting is intentionally hand-edited to see how human-friendly the parser is.
+ const Error error = config_file.parse(R"(
+[player]
+
+name = "Unnamed Player"
+tagline="Waiting
+for
+Godot"
+
+color =Color( 0, 0.5,1, 1) ; Inline comment
+position= Vector2(
+ 3,
+ 4
+)
+
+[graphics]
+
+antialiasing = true
+
+; Testing comments and case-sensitivity...
+antiAliasing = false
+)");
+
+ CHECK_MESSAGE(error == OK, "The configuration file should parse successfully.");
+ CHECK_MESSAGE(
+ String(config_file.get_value("player", "name")) == "Unnamed Player",
+ "Reading `player/name` should return the expected value.");
+ CHECK_MESSAGE(
+ String(config_file.get_value("player", "tagline")) == "Waiting\nfor\nGodot",
+ "Reading `player/tagline` should return the expected value.");
+ CHECK_MESSAGE(
+ Color(config_file.get_value("player", "color")).is_equal_approx(Color(0, 0.5, 1)),
+ "Reading `player/color` should return the expected value.");
+ CHECK_MESSAGE(
+ Vector2(config_file.get_value("player", "position")).is_equal_approx(Vector2(3, 4)),
+ "Reading `player/position` should return the expected value.");
+ CHECK_MESSAGE(
+ bool(config_file.get_value("graphics", "antialiasing")),
+ "Reading `graphics/antialiasing` should return `true`.");
+ CHECK_MESSAGE(
+ bool(config_file.get_value("graphics", "antiAliasing")) == false,
+ "Reading `graphics/antiAliasing` should return `false`.");
+
+ // An empty ConfigFile is valid.
+ const Error error_empty = config_file.parse("");
+ CHECK_MESSAGE(error_empty == OK,
+ "An empty configuration file should parse successfully.");
+}
+
+TEST_CASE("[ConfigFile] Parsing malformatted file") {
+ ConfigFile config_file;
+ ERR_PRINT_OFF;
+ const Error error = config_file.parse(R"(
+[player]
+
+name = "Unnamed Player"" ; Extraneous closing quote.
+tagline = "Waiting\nfor\nGodot"
+
+color = Color(0, 0.5, 1) ; Missing 4th parameter.
+position = Vector2(
+ 3,,
+ 4
+) ; Extraneous comma.
+
+[graphics]
+
+antialiasing = true
+antialiasing = false ; Duplicate key.
+)");
+ ERR_PRINT_ON;
+
+ CHECK_MESSAGE(error == ERR_PARSE_ERROR,
+ "The configuration file shouldn't parse successfully.");
+}
+
+TEST_CASE("[ConfigFile] Saving file") {
+ ConfigFile config_file;
+ config_file.set_value("player", "name", "Unnamed Player");
+ config_file.set_value("player", "tagline", "Waiting\nfor\nGodot");
+ config_file.set_value("player", "color", Color(0, 0.5, 1));
+ config_file.set_value("player", "position", Vector2(3, 4));
+ config_file.set_value("graphics", "antialiasing", true);
+ config_file.set_value("graphics", "antiAliasing", false);
+
+#ifdef WINDOWS_ENABLED
+ const String config_path = OS::get_singleton()->get_environment("TEMP").plus_file("config.ini");
+#else
+ const String config_path = "/tmp/config.ini";
+#endif
+
+ config_file.save(config_path);
+
+ // Expected contents of the saved ConfigFile.
+ const String contents = R"([player]
+
+name="Unnamed Player"
+tagline="Waiting
+for
+Godot"
+color=Color( 0, 0.5, 1, 1 )
+position=Vector2( 3, 4 )
+
+[graphics]
+
+antialiasing=true
+antiAliasing=false
+)";
+
+ FileAccessRef file = FileAccess::open(config_path, FileAccess::READ);
+ CHECK_MESSAGE(file->get_as_utf8_string() == contents,
+ "The saved configuration file should match the expected format.");
+}
+} // namespace TestConfigFile
+
+#endif // TEST_CONFIG_FILE_H
diff --git a/tests/test_curve.h b/tests/test_curve.h
new file mode 100644
index 0000000000..b123ef6325
--- /dev/null
+++ b/tests/test_curve.h
@@ -0,0 +1,221 @@
+/*************************************************************************/
+/* test_curve.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_CURVE_H
+#define TEST_CURVE_H
+
+#include "scene/resources/curve.h"
+
+#include "thirdparty/doctest/doctest.h"
+
+namespace TestCurve {
+
+TEST_CASE("[Curve] Default curve") {
+ const Ref<Curve> curve = memnew(Curve);
+
+ CHECK_MESSAGE(
+ curve->get_point_count() == 0,
+ "Default curve should contain the expected number of points.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->interpolate(0)),
+ "Default curve should return the expected value at offset 0.0.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->interpolate(0.5)),
+ "Default curve should return the expected value at offset 0.5.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->interpolate(1)),
+ "Default curve should return the expected value at offset 1.0.");
+}
+
+TEST_CASE("[Curve] Custom curve with free tangents") {
+ Ref<Curve> curve = memnew(Curve);
+ // "Sawtooth" curve with an open ending towards the 1.0 offset.
+ curve->add_point(Vector2(0, 0));
+ curve->add_point(Vector2(0.25, 1));
+ curve->add_point(Vector2(0.5, 0));
+ curve->add_point(Vector2(0.75, 1));
+
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->get_point_left_tangent(0)),
+ "get_point_left_tangent() should return the expected value for point index 0.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->get_point_right_tangent(0)),
+ "get_point_right_tangent() should return the expected value for point index 0.");
+ CHECK_MESSAGE(
+ curve->get_point_left_mode(0) == Curve::TangentMode::TANGENT_FREE,
+ "get_point_left_mode() should return the expected value for point index 0.");
+ CHECK_MESSAGE(
+ curve->get_point_right_mode(0) == Curve::TangentMode::TANGENT_FREE,
+ "get_point_right_mode() should return the expected value for point index 0.");
+
+ CHECK_MESSAGE(
+ curve->get_point_count() == 4,
+ "Custom free curve should contain the expected number of points.");
+
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(-0.1), 0),
+ "Custom free curve should return the expected value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.1), 0.352),
+ "Custom free curve should return the expected value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.4), 0.352),
+ "Custom free curve should return the expected value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.7), 0.896),
+ "Custom free curve should return the expected value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(1), 1),
+ "Custom free curve should return the expected value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(2), 1),
+ "Custom free curve should return the expected value at offset 0.1.");
+
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(-0.1), 0),
+ "Custom free curve should return the expected baked value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.1), 0.352),
+ "Custom free curve should return the expected baked value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.4), 0.352),
+ "Custom free curve should return the expected baked value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.7), 0.896),
+ "Custom free curve should return the expected baked value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(1), 1),
+ "Custom free curve should return the expected baked value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(2), 1),
+ "Custom free curve should return the expected baked value at offset 0.1.");
+
+ curve->remove_point(1);
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.1), 0),
+ "Custom free curve should return the expected value at offset 0.1 after removing point at index 1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.1), 0),
+ "Custom free curve should return the expected baked value at offset 0.1 after removing point at index 1.");
+
+ curve->clear_points();
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.6), 0),
+ "Custom free curve should return the expected value at offset 0.6 after clearing all points.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.6), 0),
+ "Custom free curve should return the expected baked value at offset 0.6 after clearing all points.");
+}
+
+TEST_CASE("[Curve] Custom curve with linear tangents") {
+ Ref<Curve> curve = memnew(Curve);
+ // "Sawtooth" curve with an open ending towards the 1.0 offset.
+ curve->add_point(Vector2(0, 0), 0, 0, Curve::TangentMode::TANGENT_LINEAR, Curve::TangentMode::TANGENT_LINEAR);
+ curve->add_point(Vector2(0.25, 1), 0, 0, Curve::TangentMode::TANGENT_LINEAR, Curve::TangentMode::TANGENT_LINEAR);
+ curve->add_point(Vector2(0.5, 0), 0, 0, Curve::TangentMode::TANGENT_LINEAR, Curve::TangentMode::TANGENT_LINEAR);
+ curve->add_point(Vector2(0.75, 1), 0, 0, Curve::TangentMode::TANGENT_LINEAR, Curve::TangentMode::TANGENT_LINEAR);
+
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->get_point_left_tangent(3), 4),
+ "get_point_left_tangent() should return the expected value for point index 3.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->get_point_right_tangent(3)),
+ "get_point_right_tangent() should return the expected value for point index 3.");
+ CHECK_MESSAGE(
+ curve->get_point_left_mode(3) == Curve::TangentMode::TANGENT_LINEAR,
+ "get_point_left_mode() should return the expected value for point index 3.");
+ CHECK_MESSAGE(
+ curve->get_point_right_mode(3) == Curve::TangentMode::TANGENT_LINEAR,
+ "get_point_right_mode() should return the expected value for point index 3.");
+
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(
+ Math::is_zero_approx(curve->get_point_right_tangent(300)),
+ "get_point_right_tangent() should return the expected value for invalid point index 300.");
+ CHECK_MESSAGE(
+ curve->get_point_left_mode(-12345) == Curve::TangentMode::TANGENT_FREE,
+ "get_point_left_mode() should return the expected value for invalid point index -12345.");
+ ERR_PRINT_ON;
+
+ CHECK_MESSAGE(
+ curve->get_point_count() == 4,
+ "Custom linear curve should contain the expected number of points.");
+
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(-0.1), 0),
+ "Custom linear curve should return the expected value at offset -0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.1), 0.4),
+ "Custom linear curve should return the expected value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.4), 0.4),
+ "Custom linear curve should return the expected value at offset 0.4.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.7), 0.8),
+ "Custom linear curve should return the expected value at offset 0.7.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(1), 1),
+ "Custom linear curve should return the expected value at offset 1.0.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(2), 1),
+ "Custom linear curve should return the expected value at offset 2.0.");
+
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(-0.1), 0),
+ "Custom linear curve should return the expected baked value at offset -0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.1), 0.4),
+ "Custom linear curve should return the expected baked value at offset 0.1.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.4), 0.4),
+ "Custom linear curve should return the expected baked value at offset 0.4.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.7), 0.8),
+ "Custom linear curve should return the expected baked value at offset 0.7.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(1), 1),
+ "Custom linear curve should return the expected baked value at offset 1.0.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(2), 1),
+ "Custom linear curve should return the expected baked value at offset 2.0.");
+
+ ERR_PRINT_OFF;
+ curve->remove_point(10);
+ ERR_PRINT_ON;
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate(0.7), 0.8),
+ "Custom free curve should return the expected value at offset 0.7 after removing point at invalid index 10.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(curve->interpolate_baked(0.7), 0.8),
+ "Custom free curve should return the expected baked value at offset 0.7 after removing point at invalid index 10.");
+}
+} // namespace TestCurve
+
+#endif // TEST_CURVE_H
diff --git a/tests/test_expression.h b/tests/test_expression.h
index c9cb0158f3..0d970ba87a 100644
--- a/tests/test_expression.h
+++ b/tests/test_expression.h
@@ -439,7 +439,6 @@ TEST_CASE("[Expression] Unusual expressions") {
// int64_t(expression.execute()) == 0,
// "`(-9223372036854775807 - 1) / -1` should return the expected result.");
}
-
} // namespace TestExpression
#endif // TEST_EXPRESSION_H
diff --git a/tests/test_gradient.h b/tests/test_gradient.h
index 8f28dfd9b4..0c018c33e5 100644
--- a/tests/test_gradient.h
+++ b/tests/test_gradient.h
@@ -146,7 +146,6 @@ TEST_CASE("[Gradient] Custom gradient (points specified out-of-order)") {
gradient->get_color_at_offset(0.1).is_equal_approx(Color(1, 0, 0)),
"Custom out-of-order gradient should return the expected interpolated value at offset 0.1 after removing point at index 0.");
}
-
} // namespace TestGradient
#endif // TEST_GRADIENT_H
diff --git a/tests/test_gui.cpp b/tests/test_gui.cpp
index 03c9dfd2ba..c2d81bda69 100644
--- a/tests/test_gui.cpp
+++ b/tests/test_gui.cpp
@@ -265,7 +265,6 @@ public:
MainLoop *test() {
return memnew(TestMainLoop);
}
-
} // namespace TestGUI
#endif
diff --git a/tests/test_json.h b/tests/test_json.h
new file mode 100644
index 0000000000..fe29e89e06
--- /dev/null
+++ b/tests/test_json.h
@@ -0,0 +1,166 @@
+/*************************************************************************/
+/* test_json.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_JSON_H
+#define TEST_JSON_H
+
+#include "core/io/json.h"
+
+#include "thirdparty/doctest/doctest.h"
+
+namespace TestJSON {
+
+// NOTE: The current JSON parser accepts many non-conformant strings such as
+// single-quoted strings, duplicate commas and trailing commas.
+// This is intentionally not tested as users shouldn't rely on this behavior.
+
+TEST_CASE("[JSON] Parsing single data types") {
+ // Parsing a single data type as JSON is valid per the JSON specification.
+
+ JSON json;
+ Variant result;
+ String err_str;
+ int err_line;
+
+ json.parse("null", result, err_str, err_line);
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing `null` as JSON should parse successfully.");
+ CHECK_MESSAGE(
+ result == Variant(),
+ "Parsing a double quoted string as JSON should return the expected value.");
+
+ json.parse("true", result, err_str, err_line);
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing boolean `true` as JSON should parse successfully.");
+ CHECK_MESSAGE(
+ result,
+ "Parsing boolean `true` as JSON should return the expected value.");
+
+ json.parse("false", result, err_str, err_line);
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing boolean `false` as JSON should parse successfully.");
+ CHECK_MESSAGE(
+ !result,
+ "Parsing boolean `false` as JSON should return the expected value.");
+
+ // JSON only has a floating-point number type, no integer type.
+ // This is why we use `is_equal_approx()` for the comparison.
+ json.parse("123456", result, err_str, err_line);
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing an integer number as JSON should parse successfully.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(result, 123'456),
+ "Parsing an integer number as JSON should return the expected value.");
+
+ json.parse("0.123456", result, err_str, err_line);
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing a floating-point number as JSON should parse successfully.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(result, 0.123456),
+ "Parsing a floating-point number as JSON should return the expected value.");
+
+ json.parse("\"hello\"", result, err_str, err_line);
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing a double quoted string as JSON should parse successfully.");
+ CHECK_MESSAGE(
+ result == "hello",
+ "Parsing a double quoted string as JSON should return the expected value.");
+}
+
+TEST_CASE("[JSON] Parsing arrays") {
+ JSON json;
+ Variant result;
+ String err_str;
+ int err_line;
+
+ // JSON parsing fails if it's split over several lines (even if leading indentation is removed).
+ json.parse(
+ R"(["Hello", "world.", "This is",["a","json","array.",[]], "Empty arrays ahoy:", [[["Gotcha!"]]]])",
+ result, err_str, err_line);
+
+ const Array array = result;
+ CHECK_MESSAGE(
+ err_line == 0,
+ "Parsing a JSON array should parse successfully.");
+ CHECK_MESSAGE(
+ array[0] == "Hello",
+ "The parsed JSON should contain the expected values.");
+ const Array sub_array = array[3];
+ CHECK_MESSAGE(
+ sub_array.size() == 4,
+ "The parsed JSON should contain the expected values.");
+ CHECK_MESSAGE(
+ sub_array[1] == "json",
+ "The parsed JSON should contain the expected values.");
+ CHECK_MESSAGE(
+ sub_array[3].hash() == Array().hash(),
+ "The parsed JSON should contain the expected values.");
+ const Array deep_array = Array(Array(array[5])[0])[0];
+ CHECK_MESSAGE(
+ deep_array[0] == "Gotcha!",
+ "The parsed JSON should contain the expected values.");
+}
+
+TEST_CASE("[JSON] Parsing objects (dictionaries)") {
+ JSON json;
+ Variant result;
+ String err_str;
+ int err_line;
+
+ json.parse(
+ R"({"name": "Godot Engine", "is_free": true, "bugs": null, "apples": {"red": 500, "green": 0, "blue": -20}, "empty_object": {}})",
+ result, err_str, err_line);
+
+ const Dictionary dictionary = result;
+ CHECK_MESSAGE(
+ dictionary["name"] == "Godot Engine",
+ "The parsed JSON should contain the expected values.");
+ CHECK_MESSAGE(
+ dictionary["is_free"],
+ "The parsed JSON should contain the expected values.");
+ CHECK_MESSAGE(
+ dictionary["bugs"] == Variant(),
+ "The parsed JSON should contain the expected values.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Dictionary(dictionary["apples"])["blue"], -20),
+ "The parsed JSON should contain the expected values.");
+ CHECK_MESSAGE(
+ dictionary["empty_object"].hash() == Dictionary().hash(),
+ "The parsed JSON should contain the expected values.");
+}
+} // namespace TestJSON
+
+#endif // TEST_JSON_H
diff --git a/tests/test_list.h b/tests/test_list.h
index adeedaaf3e..1b23233838 100644
--- a/tests/test_list.h
+++ b/tests/test_list.h
@@ -273,7 +273,6 @@ TEST_CASE("[Stress][List] Swap random 10 elements, 1000 iterations.") {
populate_integers(list, n, 10);
swap_random(list, n, 10, 1000);
}
-
} // namespace TestList
#endif // TEST_LIST_H
diff --git a/tests/test_main.cpp b/tests/test_main.cpp
index 6430d967c2..4388654d08 100644
--- a/tests/test_main.cpp
+++ b/tests/test_main.cpp
@@ -37,17 +37,23 @@
#include "test_class_db.h"
#include "test_color.h"
#include "test_command_queue.h"
+#include "test_config_file.h"
+#include "test_curve.h"
#include "test_expression.h"
#include "test_gradient.h"
#include "test_gui.h"
+#include "test_json.h"
#include "test_list.h"
#include "test_math.h"
#include "test_method_bind.h"
+#include "test_node_path.h"
#include "test_oa_hash_map.h"
#include "test_object.h"
#include "test_ordered_hash_map.h"
+#include "test_pck_packer.h"
#include "test_physics_2d.h"
#include "test_physics_3d.h"
+#include "test_rect2.h"
#include "test_render.h"
#include "test_shader_lang.h"
#include "test_string.h"
@@ -109,10 +115,6 @@ int test_main(int argc, char *argv[]) {
test_context.applyCommandLine(test_args.size(), doctest_args);
- test_context.setOption("order-by", "name");
- test_context.setOption("abort-after", 5);
- test_context.setOption("no-breaks", true);
-
for (int x = 0; x < test_args.size(); x++) {
delete[] doctest_args[x];
}
diff --git a/tests/test_math.cpp b/tests/test_math.cpp
index e745d1609e..a7f99e5401 100644
--- a/tests/test_math.cpp
+++ b/tests/test_math.cpp
@@ -699,5 +699,4 @@ MainLoop *test() {
return nullptr;
}
-
} // namespace TestMath
diff --git a/tests/test_method_bind.h b/tests/test_method_bind.h
index 9507a10d3e..62d8bd132c 100644
--- a/tests/test_method_bind.h
+++ b/tests/test_method_bind.h
@@ -159,7 +159,6 @@ TEST_CASE("[MethodBind] check all method binds") {
memdelete(mbt);
}
-
} // namespace TestMethodBind
#endif // TEST_METHOD_BIND_H
diff --git a/tests/test_node_path.h b/tests/test_node_path.h
new file mode 100644
index 0000000000..e9e06186f5
--- /dev/null
+++ b/tests/test_node_path.h
@@ -0,0 +1,172 @@
+/*************************************************************************/
+/* test_node_path.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_NODE_PATH_H
+#define TEST_NODE_PATH_H
+
+#include "core/string/node_path.h"
+
+#include "thirdparty/doctest/doctest.h"
+
+namespace TestNodePath {
+
+TEST_CASE("[NodePath] Relative path") {
+ const NodePath node_path_relative = NodePath("Path2D/PathFollow2D/Sprite2D:position:x");
+
+ CHECK_MESSAGE(
+ node_path_relative.get_as_property_path() == NodePath(":Path2D/PathFollow2D/Sprite2D:position:x"),
+ "The returned property path should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_relative.get_concatenated_subnames() == "position:x",
+ "The returned concatenated subnames should match the expected value.");
+
+ CHECK_MESSAGE(
+ node_path_relative.get_name(0) == "Path2D",
+ "The returned name at index 0 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_relative.get_name(1) == "PathFollow2D",
+ "The returned name at index 1 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_relative.get_name(2) == "Sprite2D",
+ "The returned name at index 2 should match the expected value.");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(
+ node_path_relative.get_name(3) == "",
+ "The returned name at invalid index 3 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_relative.get_name(-1) == "",
+ "The returned name at invalid index -1 should match the expected value.");
+ ERR_PRINT_ON;
+
+ CHECK_MESSAGE(
+ node_path_relative.get_name_count() == 3,
+ "The returned number of names should match the expected value.");
+
+ CHECK_MESSAGE(
+ node_path_relative.get_subname(0) == "position",
+ "The returned subname at index 0 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_relative.get_subname(1) == "x",
+ "The returned subname at index 1 should match the expected value.");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(
+ node_path_relative.get_subname(2) == "",
+ "The returned subname at invalid index 2 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_relative.get_subname(-1) == "",
+ "The returned subname at invalid index -1 should match the expected value.");
+ ERR_PRINT_ON;
+
+ CHECK_MESSAGE(
+ node_path_relative.get_subname_count() == 2,
+ "The returned number of subnames should match the expected value.");
+
+ CHECK_MESSAGE(
+ !node_path_relative.is_absolute(),
+ "The node path should be considered relative.");
+
+ CHECK_MESSAGE(
+ !node_path_relative.is_empty(),
+ "The node path shouldn't be considered empty.");
+}
+
+TEST_CASE("[NodePath] Absolute path") {
+ const NodePath node_path_aboslute = NodePath("/root/Sprite2D");
+
+ CHECK_MESSAGE(
+ node_path_aboslute.get_as_property_path() == NodePath(":root/Sprite2D"),
+ "The returned property path should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_aboslute.get_concatenated_subnames() == "",
+ "The returned concatenated subnames should match the expected value.");
+
+ CHECK_MESSAGE(
+ node_path_aboslute.get_name(0) == "root",
+ "The returned name at index 0 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_aboslute.get_name(1) == "Sprite2D",
+ "The returned name at index 1 should match the expected value.");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(
+ node_path_aboslute.get_name(2) == "",
+ "The returned name at invalid index 2 should match the expected value.");
+ CHECK_MESSAGE(
+ node_path_aboslute.get_name(-1) == "",
+ "The returned name at invalid index -1 should match the expected value.");
+ ERR_PRINT_ON;
+
+ CHECK_MESSAGE(
+ node_path_aboslute.get_name_count() == 2,
+ "The returned number of names should match the expected value.");
+
+ CHECK_MESSAGE(
+ node_path_aboslute.get_subname_count() == 0,
+ "The returned number of subnames should match the expected value.");
+
+ CHECK_MESSAGE(
+ node_path_aboslute.is_absolute(),
+ "The node path should be considered absolute.");
+
+ CHECK_MESSAGE(
+ !node_path_aboslute.is_empty(),
+ "The node path shouldn't be considered empty.");
+}
+
+TEST_CASE("[NodePath] Empty path") {
+ const NodePath node_path_empty = NodePath();
+
+ CHECK_MESSAGE(
+ node_path_empty.get_as_property_path() == NodePath(),
+ "The returned property path should match the expected value.");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(
+ node_path_empty.get_concatenated_subnames() == "",
+ "The returned concatenated subnames should match the expected value.");
+ ERR_PRINT_ON;
+
+ CHECK_MESSAGE(
+ node_path_empty.get_name_count() == 0,
+ "The returned number of names should match the expected value.");
+
+ CHECK_MESSAGE(
+ node_path_empty.get_subname_count() == 0,
+ "The returned number of subnames should match the expected value.");
+
+ CHECK_MESSAGE(
+ !node_path_empty.is_absolute(),
+ "The node path shouldn't be considered absolute.");
+
+ CHECK_MESSAGE(
+ node_path_empty.is_empty(),
+ "The node path should be considered empty.");
+}
+} // namespace TestNodePath
+
+#endif // TEST_NODE_PATH_H
diff --git a/tests/test_oa_hash_map.cpp b/tests/test_oa_hash_map.cpp
index 44717e5690..b0bb01bc71 100644
--- a/tests/test_oa_hash_map.cpp
+++ b/tests/test_oa_hash_map.cpp
@@ -295,5 +295,4 @@ MainLoop *test() {
return nullptr;
}
-
} // namespace TestOAHashMap
diff --git a/tests/test_ordered_hash_map.h b/tests/test_ordered_hash_map.h
index 9f987e8833..ef26d2531b 100644
--- a/tests/test_ordered_hash_map.h
+++ b/tests/test_ordered_hash_map.h
@@ -133,7 +133,6 @@ TEST_CASE("[OrderedHashMap] Const iteration") {
++idx;
}
}
-
} // namespace TestOrderedHashMap
#endif // TEST_ORDERED_HASH_MAP_H
diff --git a/tests/test_pck_packer.h b/tests/test_pck_packer.h
new file mode 100644
index 0000000000..e086d65105
--- /dev/null
+++ b/tests/test_pck_packer.h
@@ -0,0 +1,114 @@
+/*************************************************************************/
+/* test_pck_packer.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_PCK_PACKER_H
+#define TEST_PCK_PACKER_H
+
+#include "core/io/file_access_pack.h"
+#include "core/io/pck_packer.h"
+#include "core/os/os.h"
+
+#include "thirdparty/doctest/doctest.h"
+
+namespace TestPCKPacker {
+
+// Dummy 64-character encryption key (since it's required).
+constexpr const char *ENCRYPTION_KEY = "0000000000000000000000000000000000000000000000000000000000000000";
+
+TEST_CASE("[PCKPacker] Pack an empty PCK file") {
+ PCKPacker pck_packer;
+ const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
+ CHECK_MESSAGE(
+ pck_packer.pck_start(
+ output_pck_path,
+ 32,
+ ENCRYPTION_KEY) == OK,
+ "Starting a PCK file should return an OK error code.");
+
+ CHECK_MESSAGE(
+ pck_packer.flush() == OK,
+ "Flushing the PCK should return an OK error code.");
+
+ Error err;
+ FileAccessRef f = FileAccess::open(output_pck_path, FileAccess::READ, &err);
+ CHECK_MESSAGE(
+ err == OK,
+ "The generated empty PCK file should be opened successfully.");
+ CHECK_MESSAGE(
+ f->get_len() >= 100,
+ "The generated empty PCK file shouldn't be too small (it should have the PCK header).");
+ CHECK_MESSAGE(
+ f->get_len() <= 500,
+ "The generated empty PCK file shouldn't be too large.");
+}
+
+TEST_CASE("[PCKPacker] Pack a PCK file with some files and directories") {
+ PCKPacker pck_packer;
+ const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_with_files.pck");
+ CHECK_MESSAGE(
+ pck_packer.pck_start(
+ output_pck_path,
+ 32,
+ ENCRYPTION_KEY) == OK,
+ "Starting a PCK file should return an OK error code.");
+
+ const String base_dir = OS::get_singleton()->get_executable_path().get_base_dir();
+
+ CHECK_MESSAGE(
+ pck_packer.add_file("version.py", base_dir.plus_file("../version.py"), "version.py") == OK,
+ "Adding a file to the PCK should return an OK error code.");
+ CHECK_MESSAGE(
+ pck_packer.add_file("some/directories with spaces/to/create/icon.png", base_dir.plus_file("../icon.png")) == OK,
+ "Adding a file to a new subdirectory in the PCK should return an OK error code.");
+ CHECK_MESSAGE(
+ pck_packer.add_file("some/directories with spaces/to/create/icon.svg", base_dir.plus_file("../icon.svg")) == OK,
+ "Adding a file to an existing subdirectory in the PCK should return an OK error code.");
+ CHECK_MESSAGE(
+ pck_packer.add_file("some/directories with spaces/to/create/icon.png", base_dir.plus_file("../logo.png")) == OK,
+ "Overriding a non-flushed file to an existing subdirectory in the PCK should return an OK error code.");
+ CHECK_MESSAGE(
+ pck_packer.flush() == OK,
+ "Flushing the PCK should return an OK error code.");
+
+ Error err;
+ FileAccessRef f = FileAccess::open(output_pck_path, FileAccess::READ, &err);
+ CHECK_MESSAGE(
+ err == OK,
+ "The generated non-empty PCK file should be opened successfully.");
+ CHECK_MESSAGE(
+ f->get_len() >= 25000,
+ "The generated non-empty PCK file should be large enough to actually hold the contents specified above.");
+ CHECK_MESSAGE(
+ f->get_len() <= 35000,
+ "The generated non-empty PCK file shouldn't be too large.");
+}
+} // namespace TestPCKPacker
+
+#endif // TEST_PCK_PACKER_H
diff --git a/tests/test_physics_2d.cpp b/tests/test_physics_2d.cpp
index 54d373b454..d40df52f1b 100644
--- a/tests/test_physics_2d.cpp
+++ b/tests/test_physics_2d.cpp
@@ -403,5 +403,4 @@ namespace TestPhysics2D {
MainLoop *test() {
return memnew(TestPhysics2DMainLoop);
}
-
} // namespace TestPhysics2D
diff --git a/tests/test_physics_3d.cpp b/tests/test_physics_3d.cpp
index 1b453be76d..5f84b2eb50 100644
--- a/tests/test_physics_3d.cpp
+++ b/tests/test_physics_3d.cpp
@@ -409,5 +409,4 @@ namespace TestPhysics3D {
MainLoop *test() {
return memnew(TestPhysics3DMainLoop);
}
-
} // namespace TestPhysics3D
diff --git a/tests/test_rect2.h b/tests/test_rect2.h
new file mode 100644
index 0000000000..aefceb1128
--- /dev/null
+++ b/tests/test_rect2.h
@@ -0,0 +1,467 @@
+/*************************************************************************/
+/* test_rect2.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2020 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2020 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#ifndef TEST_RECT2_H
+#define TEST_RECT2_H
+
+#include "core/math/rect2.h"
+
+#include "thirdparty/doctest/doctest.h"
+
+namespace TestRect2 {
+// We also test Rect2i here, for consistency with the source code where Rect2
+// and Rect2i are defined in the same file.
+
+// Rect2
+
+TEST_CASE("[Rect2] Constructor methods") {
+ const Rect2 rect = Rect2(0, 100, 1280, 720);
+ const Rect2 rect_vector = Rect2(Vector2(0, 100), Vector2(1280, 720));
+ const Rect2 rect_copy_rect = Rect2(rect);
+ const Rect2 rect_copy_recti = Rect2(Rect2i(0, 100, 1280, 720));
+
+ CHECK_MESSAGE(
+ rect == rect_vector,
+ "Rect2s created with the same dimensions but by different methods should be equal.");
+ CHECK_MESSAGE(
+ rect == rect_copy_rect,
+ "Rect2s created with the same dimensions but by different methods should be equal.");
+ CHECK_MESSAGE(
+ rect == rect_copy_recti,
+ "Rect2s created with the same dimensions but by different methods should be equal.");
+}
+
+TEST_CASE("[Rect2] String conversion") {
+ // Note: This also depends on the Vector2 string representation.
+ CHECK_MESSAGE(
+ String(Rect2(0, 100, 1280, 720)) == "0, 100, 1280, 720",
+ "The string representation should match the expected value.");
+}
+
+TEST_CASE("[Rect2] Basic getters") {
+ const Rect2 rect = Rect2(0, 100, 1280, 720);
+ CHECK_MESSAGE(
+ rect.get_position().is_equal_approx(Vector2(0, 100)),
+ "get_position() should return the expected value.");
+ CHECK_MESSAGE(
+ rect.get_size().is_equal_approx(Vector2(1280, 720)),
+ "get_size() should return the expected value.");
+ CHECK_MESSAGE(
+ rect.get_end().is_equal_approx(Vector2(1280, 820)),
+ "get_end() should return the expected value.");
+}
+
+TEST_CASE("[Rect2] Basic setters") {
+ Rect2 rect = Rect2(0, 100, 1280, 720);
+ rect.set_end(Vector2(4000, 4000));
+ CHECK_MESSAGE(
+ rect.is_equal_approx(Rect2(0, 100, 4000, 3900)),
+ "set_end() should result in the expected Rect2.");
+
+ rect = Rect2(0, 100, 1280, 720);
+ rect.set_position(Vector2(4000, 4000));
+ CHECK_MESSAGE(
+ rect.is_equal_approx(Rect2(4000, 4000, 1280, 720)),
+ "set_position() should result in the expected Rect2.");
+
+ rect = Rect2(0, 100, 1280, 720);
+ rect.set_size(Vector2(4000, 4000));
+ CHECK_MESSAGE(
+ rect.is_equal_approx(Rect2(0, 100, 4000, 4000)),
+ "set_size() should result in the expected Rect2.");
+}
+
+TEST_CASE("[Rect2] Area getters") {
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2(0, 100, 1280, 720).get_area(), 921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2(0, 100, -1280, -720).get_area(), 921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2(0, 100, 1280, -720).get_area(), -921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2(0, 100, -1280, 720).get_area(), -921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(Rect2(0, 100, 0, 720).get_area()),
+ "get_area() should return the expected value.");
+
+ CHECK_MESSAGE(
+ !Rect2(0, 100, 1280, 720).has_no_area(),
+ "has_no_area() should return the expected value on Rect2 with an area.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 0, 500).has_no_area(),
+ "has_no_area() should return the expected value on Rect2 with no area.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 500, 0).has_no_area(),
+ "has_no_area() should return the expected value on Rect2 with no area.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 0, 0).has_no_area(),
+ "has_no_area() should return the expected value on Rect2 with no area.");
+}
+
+TEST_CASE("[Rect2] Absolute coordinates") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).abs().is_equal_approx(Rect2(0, 100, 1280, 720)),
+ "abs() should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, -100, 1280, 720).abs().is_equal_approx(Rect2(0, -100, 1280, 720)),
+ "abs() should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, -100, -1280, -720).abs().is_equal_approx(Rect2(-1280, -820, 1280, 720)),
+ "abs() should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, -1280, 720).abs().is_equal_approx(Rect2(-1280, 100, 1280, 720)),
+ "abs() should return the expected Rect2.");
+}
+
+TEST_CASE("[Rect2] Clipping") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).clip(Rect2(0, 300, 100, 100)).is_equal_approx(Rect2(0, 300, 100, 100)),
+ "clip() with fully enclosed Rect2 should return the expected result.");
+ // The resulting Rect2 is 100 pixels high because the first Rect2 is vertically offset by 100 pixels.
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).clip(Rect2(1200, 700, 100, 100)).is_equal_approx(Rect2(1200, 700, 80, 100)),
+ "clip() with partially enclosed Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).clip(Rect2(-4000, -4000, 100, 100)).is_equal_approx(Rect2()),
+ "clip() with non-enclosed Rect2 should return the expected result.");
+}
+
+TEST_CASE("[Rect2] Enclosing") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).encloses(Rect2(0, 300, 100, 100)),
+ "clip() with fully contained Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2(0, 100, 1280, 720).encloses(Rect2(1200, 700, 100, 100)),
+ "clip() with partially contained Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2(0, 100, 1280, 720).encloses(Rect2(-4000, -4000, 100, 100)),
+ "clip() with non-contained Rect2 should return the expected result.");
+}
+
+TEST_CASE("[Rect2] Expanding") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).expand(Vector2(500, 600)).is_equal_approx(Rect2(0, 100, 1280, 720)),
+ "expand() with contained Vector2 should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).expand(Vector2(0, 0)).is_equal_approx(Rect2(0, 0, 1280, 820)),
+ "expand() with non-contained Vector2 should return the expected result.");
+}
+
+TEST_CASE("[Rect2] Growing") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow(100).is_equal_approx(Rect2(-100, 0, 1480, 920)),
+ "grow() with positive value should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow(-100).is_equal_approx(Rect2(100, 200, 1080, 520)),
+ "grow() with negative value should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow(-4000).is_equal_approx(Rect2(4000, 4100, -6720, -7280)),
+ "grow() with large negative value should return the expected Rect2.");
+
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow_individual(100, 200, 300, 400).is_equal_approx(Rect2(-100, -100, 1680, 1320)),
+ "grow_individual() with positive values should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow_individual(-100, 200, 300, -400).is_equal_approx(Rect2(100, -100, 1480, 520)),
+ "grow_individual() with positive and negative values should return the expected Rect2.");
+
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow_margin(MARGIN_TOP, 500).is_equal_approx(Rect2(0, -400, 1280, 1220)),
+ "grow_margin() with positive value should return the expected Rect2.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).grow_margin(MARGIN_TOP, -500).is_equal_approx(Rect2(0, 600, 1280, 220)),
+ "grow_margin() with negative value should return the expected Rect2.");
+}
+
+TEST_CASE("[Rect2] Has point") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).has_point(Vector2(500, 600)),
+ "has_point() with contained Vector2 should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2(0, 100, 1280, 720).has_point(Vector2(0, 0)),
+ "has_point() with non-contained Vector2 should return the expected result.");
+
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).has_point(Vector2(0, 110)),
+ "has_point() with positive Vector2 on left edge should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2(0, 100, 1280, 720).has_point(Vector2(1280, 110)),
+ "has_point() with positive Vector2 on right edge should return the expected result.");
+
+ CHECK_MESSAGE(
+ Rect2(-4000, 100, 1280, 720).has_point(Vector2(-4000, 110)),
+ "has_point() with negative Vector2 on left edge should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2(-4000, 100, 1280, 720).has_point(Vector2(-2720, 110)),
+ "has_point() with negative Vector2 on right edge should return the expected result.");
+}
+
+TEST_CASE("[Rect2] Intersection") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).intersects(Rect2(0, 300, 100, 100)),
+ "intersects() with fully enclosed Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).intersects(Rect2(1200, 700, 100, 100)),
+ "intersects() with partially enclosed Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2(0, 100, 1280, 720).intersects(Rect2(-4000, -4000, 100, 100)),
+ "intersects() with non-enclosed Rect2 should return the expected result.");
+}
+
+TEST_CASE("[Rect2] Merging") {
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).merge(Rect2(0, 300, 100, 100)).is_equal_approx(Rect2(0, 100, 1280, 720)),
+ "merge() with fully enclosed Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).merge(Rect2(1200, 700, 100, 100)).is_equal_approx(Rect2(0, 100, 1300, 720)),
+ "merge() with partially enclosed Rect2 should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2(0, 100, 1280, 720).merge(Rect2(-4000, -4000, 100, 100)).is_equal_approx(Rect2(-4000, -4000, 5280, 4820)),
+ "merge() with non-enclosed Rect2 should return the expected result.");
+}
+
+// Rect2i
+
+TEST_CASE("[Rect2i] Constructor methods") {
+ Rect2i recti = Rect2i(0, 100, 1280, 720);
+ Rect2i recti_vector = Rect2i(Vector2i(0, 100), Vector2i(1280, 720));
+ Rect2i recti_copy_recti = Rect2i(recti);
+ Rect2i recti_copy_rect = Rect2i(Rect2(0, 100, 1280, 720));
+
+ CHECK_MESSAGE(
+ recti == recti_vector,
+ "Rect2is created with the same dimensions but by different methods should be equal.");
+ CHECK_MESSAGE(
+ recti == recti_copy_recti,
+ "Rect2is created with the same dimensions but by different methods should be equal.");
+ CHECK_MESSAGE(
+ recti == recti_copy_rect,
+ "Rect2is created with the same dimensions but by different methods should be equal.");
+}
+
+TEST_CASE("[Rect2i] String conversion") {
+ // Note: This also depends on the Vector2 string representation.
+ CHECK_MESSAGE(
+ String(Rect2i(0, 100, 1280, 720)) == "0, 100, 1280, 720",
+ "The string representation should match the expected value.");
+}
+
+TEST_CASE("[Rect2i] Basic getters") {
+ const Rect2i rect = Rect2i(0, 100, 1280, 720);
+ CHECK_MESSAGE(
+ rect.get_position() == Vector2i(0, 100),
+ "get_position() should return the expected value.");
+ CHECK_MESSAGE(
+ rect.get_size() == Vector2i(1280, 720),
+ "get_size() should return the expected value.");
+ CHECK_MESSAGE(
+ rect.get_end() == Vector2i(1280, 820),
+ "get_end() should return the expected value.");
+}
+
+TEST_CASE("[Rect2i] Basic setters") {
+ Rect2i rect = Rect2i(0, 100, 1280, 720);
+ rect.set_end(Vector2i(4000, 4000));
+ CHECK_MESSAGE(
+ rect == Rect2i(0, 100, 4000, 3900),
+ "set_end() should result in the expected Rect2i.");
+
+ rect = Rect2i(0, 100, 1280, 720);
+ rect.set_position(Vector2i(4000, 4000));
+ CHECK_MESSAGE(
+ rect == Rect2i(4000, 4000, 1280, 720),
+ "set_position() should result in the expected Rect2i.");
+
+ rect = Rect2i(0, 100, 1280, 720);
+ rect.set_size(Vector2i(4000, 4000));
+ CHECK_MESSAGE(
+ rect == Rect2i(0, 100, 4000, 4000),
+ "set_size() should result in the expected Rect2i.");
+}
+
+TEST_CASE("[Rect2i] Area getters") {
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2i(0, 100, 1280, 720).get_area(), 921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2i(0, 100, -1280, -720).get_area(), 921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2i(0, 100, 1280, -720).get_area(), -921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_equal_approx(Rect2i(0, 100, -1280, 720).get_area(), -921'600),
+ "get_area() should return the expected value.");
+ CHECK_MESSAGE(
+ Math::is_zero_approx(Rect2i(0, 100, 0, 720).get_area()),
+ "get_area() should return the expected value.");
+
+ CHECK_MESSAGE(
+ !Rect2i(0, 100, 1280, 720).has_no_area(),
+ "has_no_area() should return the expected value on Rect2i with an area.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 0, 500).has_no_area(),
+ "has_no_area() should return the expected value on Rect2i with no area.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 500, 0).has_no_area(),
+ "has_no_area() should return the expected value on Rect2i with no area.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 0, 0).has_no_area(),
+ "has_no_area() should return the expected value on Rect2i with no area.");
+}
+
+TEST_CASE("[Rect2i] Absolute coordinates") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).abs() == Rect2i(0, 100, 1280, 720),
+ "abs() should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, -100, 1280, 720).abs() == Rect2i(0, -100, 1280, 720),
+ "abs() should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, -100, -1280, -720).abs() == Rect2i(-1280, -820, 1280, 720),
+ "abs() should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, -1280, 720).abs() == Rect2i(-1280, 100, 1280, 720),
+ "abs() should return the expected Rect2i.");
+}
+
+TEST_CASE("[Rect2i] Clipping") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).clip(Rect2i(0, 300, 100, 100)) == Rect2i(0, 300, 100, 100),
+ "clip() with fully enclosed Rect2i should return the expected result.");
+ // The resulting Rect2i is 100 pixels high because the first Rect2i is vertically offset by 100 pixels.
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).clip(Rect2i(1200, 700, 100, 100)) == Rect2i(1200, 700, 80, 100),
+ "clip() with partially enclosed Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).clip(Rect2i(-4000, -4000, 100, 100)) == Rect2i(),
+ "clip() with non-enclosed Rect2i should return the expected result.");
+}
+
+TEST_CASE("[Rect2i] Enclosing") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).encloses(Rect2i(0, 300, 100, 100)),
+ "clip() with fully contained Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2i(0, 100, 1280, 720).encloses(Rect2i(1200, 700, 100, 100)),
+ "clip() with partially contained Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2i(0, 100, 1280, 720).encloses(Rect2i(-4000, -4000, 100, 100)),
+ "clip() with non-contained Rect2i should return the expected result.");
+}
+
+TEST_CASE("[Rect2i] Expanding") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).expand(Vector2i(500, 600)) == Rect2i(0, 100, 1280, 720),
+ "expand() with contained Vector2i should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).expand(Vector2i(0, 0)) == Rect2i(0, 0, 1280, 820),
+ "expand() with non-contained Vector2i should return the expected result.");
+}
+
+TEST_CASE("[Rect2i] Growing") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow(100) == Rect2i(-100, 0, 1480, 920),
+ "grow() with positive value should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow(-100) == Rect2i(100, 200, 1080, 520),
+ "grow() with negative value should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow(-4000) == Rect2i(4000, 4100, -6720, -7280),
+ "grow() with large negative value should return the expected Rect2i.");
+
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow_individual(100, 200, 300, 400) == Rect2i(-100, -100, 1680, 1320),
+ "grow_individual() with positive values should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow_individual(-100, 200, 300, -400) == Rect2i(100, -100, 1480, 520),
+ "grow_individual() with positive and negative values should return the expected Rect2i.");
+
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow_margin(MARGIN_TOP, 500) == Rect2i(0, -400, 1280, 1220),
+ "grow_margin() with positive value should return the expected Rect2i.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).grow_margin(MARGIN_TOP, -500) == Rect2i(0, 600, 1280, 220),
+ "grow_margin() with negative value should return the expected Rect2i.");
+}
+
+TEST_CASE("[Rect2i] Has point") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).has_point(Vector2i(500, 600)),
+ "has_point() with contained Vector2i should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2i(0, 100, 1280, 720).has_point(Vector2i(0, 0)),
+ "has_point() with non-contained Vector2i should return the expected result.");
+
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).has_point(Vector2(0, 110)),
+ "has_point() with positive Vector2 on left edge should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2i(0, 100, 1280, 720).has_point(Vector2(1280, 110)),
+ "has_point() with positive Vector2 on right edge should return the expected result.");
+
+ CHECK_MESSAGE(
+ Rect2i(-4000, 100, 1280, 720).has_point(Vector2(-4000, 110)),
+ "has_point() with negative Vector2 on left edge should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2i(-4000, 100, 1280, 720).has_point(Vector2(-2720, 110)),
+ "has_point() with negative Vector2 on right edge should return the expected result.");
+}
+
+TEST_CASE("[Rect2i] Intersection") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).intersects(Rect2i(0, 300, 100, 100)),
+ "intersects() with fully enclosed Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).intersects(Rect2i(1200, 700, 100, 100)),
+ "intersects() with partially enclosed Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ !Rect2i(0, 100, 1280, 720).intersects(Rect2i(-4000, -4000, 100, 100)),
+ "intersects() with non-enclosed Rect2i should return the expected result.");
+}
+
+TEST_CASE("[Rect2i] Merging") {
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).merge(Rect2i(0, 300, 100, 100)) == Rect2i(0, 100, 1280, 720),
+ "merge() with fully enclosed Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).merge(Rect2i(1200, 700, 100, 100)) == Rect2i(0, 100, 1300, 720),
+ "merge() with partially enclosed Rect2i should return the expected result.");
+ CHECK_MESSAGE(
+ Rect2i(0, 100, 1280, 720).merge(Rect2i(-4000, -4000, 100, 100)) == Rect2i(-4000, -4000, 5280, 4820),
+ "merge() with non-enclosed Rect2i should return the expected result.");
+}
+} // namespace TestRect2
+
+#endif // TEST_RECT2_H
diff --git a/tests/test_render.cpp b/tests/test_render.cpp
index 8c5cac694c..d14251bc6a 100644
--- a/tests/test_render.cpp
+++ b/tests/test_render.cpp
@@ -98,7 +98,6 @@ public:
}
}*/
/*for(int i=0;i<100;i++) {
-
vts.push_back( Vector3(Math::randf()*2-1.0,Math::randf()*2-1.0,Math::randf()*2-1.0).normalized()*2);
}*/
/*
@@ -216,7 +215,6 @@ public:
vs->instance_set_transform(E->get().instance, pre * E->get().base);
/*
if( !E->next() ) {
-
vs->free( E->get().instance );
instances.erase(E );
}*/
@@ -236,5 +234,4 @@ public:
MainLoop *test() {
return memnew(TestMainLoop);
}
-
} // namespace TestRender
diff --git a/tests/test_shader_lang.cpp b/tests/test_shader_lang.cpp
index 4bfd593279..e79c83b001 100644
--- a/tests/test_shader_lang.cpp
+++ b/tests/test_shader_lang.cpp
@@ -357,5 +357,4 @@ MainLoop *test() {
return nullptr;
}
-
} // namespace TestShaderLang
diff --git a/tests/test_string.h b/tests/test_string.h
index acdcaccecd..48132cb278 100644
--- a/tests/test_string.h
+++ b/tests/test_string.h
@@ -1296,7 +1296,6 @@ TEST_CASE("[String] humanize_size") {
CHECK(String::humanize_size(100523550) == "95.86 MiB");
CHECK(String::humanize_size(5345555000) == "4.97 GiB");
}
-
} // namespace TestString
#endif // TEST_STRING_H
diff --git a/tests/test_variant.h b/tests/test_variant.h
index b7421c29a5..b575f6744d 100644
--- a/tests/test_variant.h
+++ b/tests/test_variant.h
@@ -105,7 +105,6 @@ TEST_CASE("[Variant] Writer and parser float") {
CHECK_MESSAGE(b64_float_parsed == 340282001837565597733306976381245063168.0, "Should not overflow.");
}
-
} // namespace TestVariant
#endif // TEST_VARIANT_H
diff --git a/thirdparty/README.md b/thirdparty/README.md
index f590acaa0b..8533995180 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -76,15 +76,11 @@ Files extracted from upstream source:
## doctest
- Upstream: https://github.com/onqtam/doctest
-- Version: 1c8da00 (2.4.0)
+- Version: 8424be5 (2.4.1)
- License: MIT
Extracted from .zip provided. Extracted license and header only.
-Important: Some files have Godot-made changes.
-They are marked with `// -- GODOT start --` and `// -- GODOT end --`
-comments.
-
## enet
- Upstream: http://enet.bespin.org
diff --git a/thirdparty/doctest/LICENSE.txt b/thirdparty/doctest/LICENSE.txt
index a204721468..50a358cd1b 100644
--- a/thirdparty/doctest/LICENSE.txt
+++ b/thirdparty/doctest/LICENSE.txt
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2016-2019 Viktor Kirilov
+Copyright (c) 2016-2020 Viktor Kirilov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/doctest/doctest.h b/thirdparty/doctest/doctest.h
index e4fed12767..acbe6cd321 100644
--- a/thirdparty/doctest/doctest.h
+++ b/thirdparty/doctest/doctest.h
@@ -4,7 +4,7 @@
//
// doctest.h - the lightest feature-rich C++ single-header testing framework for unit tests and TDD
//
-// Copyright (c) 2016-2019 Viktor Kirilov
+// Copyright (c) 2016-2020 Viktor Kirilov
//
// Distributed under the MIT Software License
// See accompanying file LICENSE.txt or copy at
@@ -48,8 +48,8 @@
#define DOCTEST_VERSION_MAJOR 2
#define DOCTEST_VERSION_MINOR 4
-#define DOCTEST_VERSION_PATCH 0
-#define DOCTEST_VERSION_STR "2.4.0"
+#define DOCTEST_VERSION_PATCH 1
+#define DOCTEST_VERSION_STR "2.4.1"
#define DOCTEST_VERSION \
(DOCTEST_VERSION_MAJOR * 10000 + DOCTEST_VERSION_MINOR * 100 + DOCTEST_VERSION_PATCH)
@@ -301,11 +301,15 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum'
#define DOCTEST_NOINLINE __declspec(noinline)
#define DOCTEST_UNUSED
#define DOCTEST_ALIGNMENT(x)
-#else // MSVC
+#elif DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 5, 0)
+#define DOCTEST_NOINLINE
+#define DOCTEST_UNUSED
+#define DOCTEST_ALIGNMENT(x)
+#else
#define DOCTEST_NOINLINE __attribute__((noinline))
#define DOCTEST_UNUSED __attribute__((unused))
#define DOCTEST_ALIGNMENT(x) __attribute__((aligned(x)))
-#endif // MSVC
+#endif
#ifndef DOCTEST_NORETURN
#define DOCTEST_NORETURN [[noreturn]]
@@ -355,14 +359,20 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum'
#ifndef DOCTEST_BREAK_INTO_DEBUGGER
// should probably take a look at https://github.com/scottt/debugbreak
-#ifdef DOCTEST_PLATFORM_MAC
-// -- GODOT start --
+#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" : :)
+#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__)
#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :)
#else
#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0");
#endif
-// -- GODOT end --
#elif DOCTEST_MSVC
#define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak()
#elif defined(__MINGW32__)
@@ -371,7 +381,7 @@ extern "C" __declspec(dllimport) void __stdcall DebugBreak();
DOCTEST_GCC_SUPPRESS_WARNING_POP
#define DOCTEST_BREAK_INTO_DEBUGGER() ::DebugBreak()
#else // linux
-#define DOCTEST_BREAK_INTO_DEBUGGER() ((void)0)
+#define DOCTEST_BREAK_INTO_DEBUGGER() (static_cast<void>(0))
#endif // linux
#endif // DOCTEST_BREAK_INTO_DEBUGGER
@@ -381,6 +391,9 @@ DOCTEST_GCC_SUPPRESS_WARNING_POP
#endif // DOCTEST_CONFIG_USE_IOSFWD
#ifdef DOCTEST_CONFIG_USE_STD_HEADERS
+#ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
#include <iosfwd>
#include <cstddef>
#include <ostream>
@@ -746,7 +759,6 @@ struct ContextOptions //!OCLINT too many fields
};
namespace detail {
-#if defined(DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING) || defined(DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS)
template <bool CONDITION, typename TYPE = void>
struct enable_if
{};
@@ -754,7 +766,6 @@ namespace detail {
template <typename TYPE>
struct enable_if<true, TYPE>
{ typedef TYPE type; };
-#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING) || DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
// clang-format off
template<class T> struct remove_reference { typedef T type; };
@@ -763,6 +774,14 @@ namespace detail {
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 { 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>
@@ -777,12 +796,12 @@ namespace detail {
template<class, class = void>
struct check {
- static constexpr auto value = false;
+ static constexpr bool value = false;
};
template<class T>
struct check<T, decltype(os() << val<T>(), void())> {
- static constexpr auto value = true;
+ static constexpr bool value = true;
};
} // namespace has_insertion_operator_impl
@@ -851,7 +870,7 @@ struct StringMaker<R C::*>
}
};
-template <typename T>
+template <typename T, typename detail::enable_if<!detail::is_enum<T>::value, bool>::type = true>
String toString(const DOCTEST_REF_WRAP(T) value) {
return StringMaker<T>::convert(value);
}
@@ -878,6 +897,12 @@ 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>
+String toString(const DOCTEST_REF_WRAP(T) value) {
+ typedef typename detail::underlying_type<T>::type UT;
+ return toString(static_cast<UT>(value));
+}
+
#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
// see this issue on why this is needed: https://github.com/onqtam/doctest/issues/183
DOCTEST_INTERFACE String toString(const std::string& in);
@@ -1289,12 +1314,12 @@ namespace detail {
template <class L, class R> struct RelationalComparator<n, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return op(lhs, rhs); } };
// clang-format on
- DOCTEST_BINARY_RELATIONAL_OP(0, eq)
- DOCTEST_BINARY_RELATIONAL_OP(1, ne)
- DOCTEST_BINARY_RELATIONAL_OP(2, gt)
- DOCTEST_BINARY_RELATIONAL_OP(3, lt)
- DOCTEST_BINARY_RELATIONAL_OP(4, ge)
- DOCTEST_BINARY_RELATIONAL_OP(5, le)
+ DOCTEST_BINARY_RELATIONAL_OP(0, doctest::detail::eq)
+ DOCTEST_BINARY_RELATIONAL_OP(1, doctest::detail::ne)
+ DOCTEST_BINARY_RELATIONAL_OP(2, doctest::detail::gt)
+ DOCTEST_BINARY_RELATIONAL_OP(3, doctest::detail::lt)
+ DOCTEST_BINARY_RELATIONAL_OP(4, doctest::detail::ge)
+ DOCTEST_BINARY_RELATIONAL_OP(5, doctest::detail::le)
struct DOCTEST_INTERFACE ResultBuilder : public AssertData
{
@@ -1421,9 +1446,9 @@ namespace detail {
} catch(T ex) { // NOLINT
res = m_translateFunction(ex); //!OCLINT parameter reassignment
return true;
- } catch(...) {} //!OCLINT - empty catch statement
-#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
- ((void)res); // to silence -Wunused-parameter
+ } catch(...) {} //!OCLINT - empty catch statement
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+ static_cast<void>(res); // to silence -Wunused-parameter
return false;
}
@@ -2189,37 +2214,37 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
-#define DOCTEST_WARN_THROWS(...) ((void)0)
-#define DOCTEST_CHECK_THROWS(...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS(...) ((void)0)
-#define DOCTEST_WARN_THROWS_AS(expr, ...) ((void)0)
-#define DOCTEST_CHECK_THROWS_AS(expr, ...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH(expr, ...) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ((void)0)
-#define DOCTEST_WARN_NOTHROW(...) ((void)0)
-#define DOCTEST_CHECK_NOTHROW(...) ((void)0)
-#define DOCTEST_REQUIRE_NOTHROW(...) ((void)0)
-
-#define DOCTEST_WARN_THROWS_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, msg) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, msg) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) ((void)0)
-#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, msg) ((void)0)
+#define DOCTEST_WARN_THROWS(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS(...) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_AS(expr, ...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0))
+#define DOCTEST_WARN_NOTHROW(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_NOTHROW(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_NOTHROW(...) (static_cast<void>(0))
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, msg) (static_cast<void>(0))
#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
@@ -2310,86 +2335,86 @@ int registerReporter(const char* name, int priority, bool isReporter) {
#define DOCTEST_REGISTER_REPORTER(name, priority, reporter)
#define DOCTEST_REGISTER_LISTENER(name, priority, reporter)
-#define DOCTEST_INFO(x) ((void)0)
-#define DOCTEST_CAPTURE(x) ((void)0)
-#define DOCTEST_ADD_MESSAGE_AT(file, line, x) ((void)0)
-#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, x) ((void)0)
-#define DOCTEST_ADD_FAIL_AT(file, line, x) ((void)0)
-#define DOCTEST_MESSAGE(x) ((void)0)
-#define DOCTEST_FAIL_CHECK(x) ((void)0)
-#define DOCTEST_FAIL(x) ((void)0)
-
-#define DOCTEST_WARN(...) ((void)0)
-#define DOCTEST_CHECK(...) ((void)0)
-#define DOCTEST_REQUIRE(...) ((void)0)
-#define DOCTEST_WARN_FALSE(...) ((void)0)
-#define DOCTEST_CHECK_FALSE(...) ((void)0)
-#define DOCTEST_REQUIRE_FALSE(...) ((void)0)
-
-#define DOCTEST_WARN_MESSAGE(cond, msg) ((void)0)
-#define DOCTEST_CHECK_MESSAGE(cond, msg) ((void)0)
-#define DOCTEST_REQUIRE_MESSAGE(cond, msg) ((void)0)
-#define DOCTEST_WARN_FALSE_MESSAGE(cond, msg) ((void)0)
-#define DOCTEST_CHECK_FALSE_MESSAGE(cond, msg) ((void)0)
-#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, msg) ((void)0)
-
-#define DOCTEST_WARN_THROWS(...) ((void)0)
-#define DOCTEST_CHECK_THROWS(...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS(...) ((void)0)
-#define DOCTEST_WARN_THROWS_AS(expr, ...) ((void)0)
-#define DOCTEST_CHECK_THROWS_AS(expr, ...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH(expr, ...) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ((void)0)
-#define DOCTEST_WARN_NOTHROW(...) ((void)0)
-#define DOCTEST_CHECK_NOTHROW(...) ((void)0)
-#define DOCTEST_REQUIRE_NOTHROW(...) ((void)0)
-
-#define DOCTEST_WARN_THROWS_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, msg) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, msg) ((void)0)
-#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) ((void)0)
-#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) ((void)0)
-#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) ((void)0)
-#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, msg) ((void)0)
-#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, msg) ((void)0)
-
-#define DOCTEST_WARN_EQ(...) ((void)0)
-#define DOCTEST_CHECK_EQ(...) ((void)0)
-#define DOCTEST_REQUIRE_EQ(...) ((void)0)
-#define DOCTEST_WARN_NE(...) ((void)0)
-#define DOCTEST_CHECK_NE(...) ((void)0)
-#define DOCTEST_REQUIRE_NE(...) ((void)0)
-#define DOCTEST_WARN_GT(...) ((void)0)
-#define DOCTEST_CHECK_GT(...) ((void)0)
-#define DOCTEST_REQUIRE_GT(...) ((void)0)
-#define DOCTEST_WARN_LT(...) ((void)0)
-#define DOCTEST_CHECK_LT(...) ((void)0)
-#define DOCTEST_REQUIRE_LT(...) ((void)0)
-#define DOCTEST_WARN_GE(...) ((void)0)
-#define DOCTEST_CHECK_GE(...) ((void)0)
-#define DOCTEST_REQUIRE_GE(...) ((void)0)
-#define DOCTEST_WARN_LE(...) ((void)0)
-#define DOCTEST_CHECK_LE(...) ((void)0)
-#define DOCTEST_REQUIRE_LE(...) ((void)0)
-
-#define DOCTEST_WARN_UNARY(...) ((void)0)
-#define DOCTEST_CHECK_UNARY(...) ((void)0)
-#define DOCTEST_REQUIRE_UNARY(...) ((void)0)
-#define DOCTEST_WARN_UNARY_FALSE(...) ((void)0)
-#define DOCTEST_CHECK_UNARY_FALSE(...) ((void)0)
-#define DOCTEST_REQUIRE_UNARY_FALSE(...) ((void)0)
+#define DOCTEST_INFO(x) (static_cast<void>(0))
+#define DOCTEST_CAPTURE(x) (static_cast<void>(0))
+#define DOCTEST_ADD_MESSAGE_AT(file, line, x) (static_cast<void>(0))
+#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, x) (static_cast<void>(0))
+#define DOCTEST_ADD_FAIL_AT(file, line, x) (static_cast<void>(0))
+#define DOCTEST_MESSAGE(x) (static_cast<void>(0))
+#define DOCTEST_FAIL_CHECK(x) (static_cast<void>(0))
+#define DOCTEST_FAIL(x) (static_cast<void>(0))
+
+#define DOCTEST_WARN(...) (static_cast<void>(0))
+#define DOCTEST_CHECK(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE(...) (static_cast<void>(0))
+#define DOCTEST_WARN_FALSE(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_FALSE(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_FALSE(...) (static_cast<void>(0))
+
+#define DOCTEST_WARN_MESSAGE(cond, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_MESSAGE(cond, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_MESSAGE(cond, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_FALSE_MESSAGE(cond, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_FALSE_MESSAGE(cond, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, msg) (static_cast<void>(0))
+
+#define DOCTEST_WARN_THROWS(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS(...) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_AS(expr, ...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) (static_cast<void>(0))
+#define DOCTEST_WARN_NOTHROW(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_NOTHROW(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_NOTHROW(...) (static_cast<void>(0))
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, msg) (static_cast<void>(0))
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, msg) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, msg) (static_cast<void>(0))
+
+#define DOCTEST_WARN_EQ(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_EQ(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_EQ(...) (static_cast<void>(0))
+#define DOCTEST_WARN_NE(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_NE(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_NE(...) (static_cast<void>(0))
+#define DOCTEST_WARN_GT(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_GT(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_GT(...) (static_cast<void>(0))
+#define DOCTEST_WARN_LT(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_LT(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_LT(...) (static_cast<void>(0))
+#define DOCTEST_WARN_GE(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_GE(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_GE(...) (static_cast<void>(0))
+#define DOCTEST_WARN_LE(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_LE(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_LE(...) (static_cast<void>(0))
+
+#define DOCTEST_WARN_UNARY(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_UNARY(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_UNARY(...) (static_cast<void>(0))
+#define DOCTEST_WARN_UNARY_FALSE(...) (static_cast<void>(0))
+#define DOCTEST_CHECK_UNARY_FALSE(...) (static_cast<void>(0))
+#define DOCTEST_REQUIRE_UNARY_FALSE(...) (static_cast<void>(0))
#endif // DOCTEST_CONFIG_DISABLE
@@ -3742,8 +3767,8 @@ namespace {
DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
void color_to_stream(std::ostream& s, Color::Enum code) {
- ((void)s); // for DOCTEST_CONFIG_COLORS_NONE or DOCTEST_CONFIG_COLORS_WINDOWS
- ((void)code); // for DOCTEST_CONFIG_COLORS_NONE
+ static_cast<void>(s); // for DOCTEST_CONFIG_COLORS_NONE or DOCTEST_CONFIG_COLORS_WINDOWS
+ static_cast<void>(code); // for DOCTEST_CONFIG_COLORS_NONE
#ifdef DOCTEST_CONFIG_COLORS_ANSI
if(g_no_colors ||
(isatty(STDOUT_FILENO) == false && getContextOptions()->force_colors == false))
@@ -3849,7 +3874,28 @@ namespace detail {
#ifdef DOCTEST_IS_DEBUGGER_ACTIVE
bool isDebuggerActive() { return DOCTEST_IS_DEBUGGER_ACTIVE(); }
#else // DOCTEST_IS_DEBUGGER_ACTIVE
-#ifdef DOCTEST_PLATFORM_MAC
+#ifdef DOCTEST_PLATFORM_LINUX
+ class ErrnoGuard {
+ public:
+ ErrnoGuard() : m_oldErrno(errno) {}
+ ~ErrnoGuard() { errno = m_oldErrno; }
+ private:
+ int m_oldErrno;
+ };
+ // See the comments in Catch2 for the reasoning behind this implementation:
+ // https://github.com/catchorg/Catch2/blob/v2.13.1/include/internal/catch_debugger.cpp#L79-L102
+ bool isDebuggerActive() {
+ ErrnoGuard guard;
+ std::ifstream in("/proc/self/status");
+ for(std::string line; std::getline(in, line);) {
+ static const int PREFIX_LEN = 11;
+ if(line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0) {
+ return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0';
+ }
+ }
+ return false;
+ }
+#elif defined(DOCTEST_PLATFORM_MAC)
// The following function is taken directly from the following technical note:
// https://developer.apple.com/library/archive/qa/qa1361/_index.html
// Returns true if the current process is being debugged (either
@@ -5460,25 +5506,28 @@ DOCTEST_CLANG_SUPPRESS_WARNING_POP
separator_to_stream();
s << std::dec;
+ auto totwidth = int(std::ceil(log10((std::max(p.numTestCasesPassingFilters, static_cast<unsigned>(p.numAsserts))) + 1)));
+ auto passwidth = int(std::ceil(log10((std::max(p.numTestCasesPassingFilters - p.numTestCasesFailed, static_cast<unsigned>(p.numAsserts - p.numAssertsFailed))) + 1)));
+ auto failwidth = int(std::ceil(log10((std::max(p.numTestCasesFailed, static_cast<unsigned>(p.numAssertsFailed))) + 1)));
const bool anythingFailed = p.numTestCasesFailed > 0 || p.numAssertsFailed > 0;
- s << Color::Cyan << "[doctest] " << Color::None << "test cases: " << std::setw(6)
+ s << Color::Cyan << "[doctest] " << Color::None << "test cases: " << std::setw(totwidth)
<< p.numTestCasesPassingFilters << " | "
<< ((p.numTestCasesPassingFilters == 0 || anythingFailed) ? Color::None :
Color::Green)
- << std::setw(6) << p.numTestCasesPassingFilters - p.numTestCasesFailed << " passed"
+ << std::setw(passwidth) << p.numTestCasesPassingFilters - p.numTestCasesFailed << " passed"
<< Color::None << " | " << (p.numTestCasesFailed > 0 ? Color::Red : Color::None)
- << std::setw(6) << p.numTestCasesFailed << " failed" << Color::None << " | ";
+ << std::setw(failwidth) << p.numTestCasesFailed << " failed" << Color::None << " |";
if(opt.no_skipped_summary == false) {
const int numSkipped = p.numTestCases - p.numTestCasesPassingFilters;
- s << (numSkipped == 0 ? Color::None : Color::Yellow) << std::setw(6) << numSkipped
+ s << " " << (numSkipped == 0 ? Color::None : Color::Yellow) << numSkipped
<< " skipped" << Color::None;
}
s << "\n";
- s << Color::Cyan << "[doctest] " << Color::None << "assertions: " << std::setw(6)
+ s << Color::Cyan << "[doctest] " << Color::None << "assertions: " << std::setw(totwidth)
<< p.numAsserts << " | "
<< ((p.numAsserts == 0 || anythingFailed) ? Color::None : Color::Green)
- << std::setw(6) << (p.numAsserts - p.numAssertsFailed) << " passed" << Color::None
- << " | " << (p.numAssertsFailed > 0 ? Color::Red : Color::None) << std::setw(6)
+ << std::setw(passwidth) << (p.numAsserts - p.numAssertsFailed) << " passed" << Color::None
+ << " | " << (p.numAssertsFailed > 0 ? Color::Red : Color::None) << std::setw(failwidth)
<< p.numAssertsFailed << " failed" << Color::None << " |\n";
s << Color::Cyan << "[doctest] " << Color::None
<< "Status: " << (p.numTestCasesFailed > 0 ? Color::Red : Color::Green)
diff --git a/thirdparty/doctest/patches/fix-arm64-mac.patch b/thirdparty/doctest/patches/fix-arm64-mac.patch
deleted file mode 100644
index f78014534f..0000000000
--- a/thirdparty/doctest/patches/fix-arm64-mac.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git a/thirdparty/doctest/doctest.h b/thirdparty/doctest/doctest.h
-index 9444698286..e4fed12767 100644
---- a/thirdparty/doctest/doctest.h
-+++ b/thirdparty/doctest/doctest.h
-@@ -356,7 +356,13 @@ DOCTEST_MSVC_SUPPRESS_WARNING(26812) // Prefer 'enum class' over 'enum'
- #ifndef DOCTEST_BREAK_INTO_DEBUGGER
- // should probably take a look at https://github.com/scottt/debugbreak
- #ifdef DOCTEST_PLATFORM_MAC
-+// -- GODOT start --
-+#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__)
- #define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :)
-+#else
-+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0");
-+#endif
-+// -- GODOT end --
- #elif DOCTEST_MSVC
- #define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak()
- #elif defined(__MINGW32__)